{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python for Finance (2nd ed.)\n",
    "\n",
    "**Mastering Data-Driven Finance**\n",
    "\n",
    "&copy; Dr. Yves J. Hilpisch | The Python Quants GmbH\n",
    "\n",
    "<img src=\"http://hilpisch.com/images/py4fi_2nd_shadow.png\" width=\"300px\" align=\"left\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Input-Output Operations"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Basic I/O with Python"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Writing Objects to Disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pylab import plt, mpl\n",
    "plt.style.use('seaborn')\n",
    "mpl.rcParams['font.family'] = 'serif'\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "uuid": "c2722e94-01ea-4f98-804f-56fe1b666770"
   },
   "outputs": [],
   "source": [
    "import pickle  \n",
    "import numpy as np\n",
    "from random import gauss   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "uuid": "7d03b06c-a907-4a16-913f-e6a8f9a05d51"
   },
   "outputs": [],
   "source": [
    "a = [gauss(1.5, 2) for i in range(1000000)]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "uuid": "d5bf9798-386b-49b8-a703-36263d9d75d4"
   },
   "outputs": [],
   "source": [
    "# adjust to path of your choice\n",
    "path = '/Users/yves/Temp/data/'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "uuid": "4aa88b7c-3155-4311-9afc-564bf3b06225"
   },
   "outputs": [],
   "source": [
    "pkl_file = open(path + 'data.pkl', 'wb')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "uuid": "e2611db7-97ed-4162-9cc5-127c7cd89cbd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 24.5 ms, sys: 9.1 ms, total: 33.6 ms\n",
      "Wall time: 32.2 ms\n"
     ]
    }
   ],
   "source": [
    "%time pickle.dump(a, pkl_file)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "uuid": "f2b0c608-c399-401b-b8fa-d44d8eca54b8"
   },
   "outputs": [],
   "source": [
    "pkl_file.close()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "uuid": "f401db99-56f3-49a5-9c75-772fe5d00d07"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  9002006 Jul 27 10:52 /Users/yves/Temp/data/data.pkl\n"
     ]
    }
   ],
   "source": [
    "ll $path*  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "uuid": "8c9bd301-e980-4eb5-9021-4fde182f5eb7"
   },
   "outputs": [],
   "source": [
    "pkl_file = open(path + 'data.pkl', 'rb')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "uuid": "6c8c4ae7-1ece-4b7c-87bc-8457da4798b2"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 37.4 ms, sys: 19.4 ms, total: 56.7 ms\n",
      "Wall time: 56.2 ms\n"
     ]
    }
   ],
   "source": [
    "%time b = pickle.load(pkl_file)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "uuid": "253951a8-ecec-4fdf-a502-86cfa1d1186d"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1.3168057051196302, -0.8475743147847687, 2.1175416311742365]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "uuid": "8bf2e00b-fa06-4524-aa51-6b295fabad00"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1.3168057051196302, -0.8475743147847687, 2.1175416311742365]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "uuid": "90b9f136-8195-4f32-9907-1b88469ae55e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.allclose(np.array(a), np.array(b))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "uuid": "7a6b9460-b5ac-4ab5-b083-9912f9dfcef8"
   },
   "outputs": [],
   "source": [
    "pkl_file = open(path + 'data.pkl', 'wb')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "uuid": "bd6b8e9a-d093-4f98-b88c-27aef388957b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 36.5 ms, sys: 3.81 ms, total: 40.3 ms\n",
      "Wall time: 39.1 ms\n"
     ]
    }
   ],
   "source": [
    "%time pickle.dump(np.array(a), pkl_file)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "uuid": "d517f9d6-8176-424c-89ef-0c892f9fd61c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 42 ms, sys: 5.46 ms, total: 47.5 ms\n",
      "Wall time: 46.5 ms\n"
     ]
    }
   ],
   "source": [
    "%time pickle.dump(np.array(a) ** 2, pkl_file)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "uuid": "5f558934-6f53-472e-9040-a5c96ee1718d"
   },
   "outputs": [],
   "source": [
    "pkl_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "uuid": "b129b0ae-6bcc-4946-817a-ff01c155eacb"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  16000322 Jul 27 10:52 /Users/yves/Temp/data/data.pkl\n"
     ]
    }
   ],
   "source": [
    "ll $path*  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "uuid": "59d5dceb-8779-46ff-b2ae-c2e43a7d2c10"
   },
   "outputs": [],
   "source": [
    "pkl_file = open(path + 'data.pkl', 'rb')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "uuid": "0f981d7b-0a68-412d-bb9b-a377524e0f2c"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1.31680571, -0.84757431,  2.11754163,  2.11467324])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = pickle.load(pkl_file)  \n",
    "x[:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "uuid": "1a9cb2b5-a180-43f3-b2ed-20de3148b8a6"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.73397727, 0.71838222, 4.48398256, 4.47184289])"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = pickle.load(pkl_file)  \n",
    "y[:4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "uuid": "6beb0285-c53c-4f56-ac42-62000ef75257"
   },
   "outputs": [],
   "source": [
    "pkl_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "uuid": "df469b3f-55c4-43e8-a01d-f850f2153871"
   },
   "outputs": [],
   "source": [
    "pkl_file = open(path + 'data.pkl', 'wb')\n",
    "pickle.dump({'x': x, 'y': y}, pkl_file)  \n",
    "pkl_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "uuid": "e6f0219a-ceb4-481d-b033-065e122493c8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x [ 1.31680571 -0.84757431  2.11754163  2.11467324]\n",
      "y [1.73397727 0.71838222 4.48398256 4.47184289]\n"
     ]
    }
   ],
   "source": [
    "pkl_file = open(path + 'data.pkl', 'rb')\n",
    "data = pickle.load(pkl_file)  \n",
    "pkl_file.close()\n",
    "for key in data.keys():\n",
    "    print(key, data[key][:4])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "uuid": "dc3181d1-7c8c-4960-8a9a-8a4d64c58a3f"
   },
   "outputs": [],
   "source": [
    "!rm -f $path*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reading and Writing Text Files"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "uuid": "5124219c-e041-4b36-af62-03faea5c0df1"
   },
   "outputs": [],
   "source": [
    "rows = 5000  \n",
    "a = np.random.standard_normal((rows, 5)).round(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "uuid": "5942c6e2-877a-4c0c-acca-11390e9a02f5"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 1.8929,  0.3149, -0.2431,  0.3221,  0.4102],\n",
       "       [ 1.1507,  0.433 , -1.7408, -0.8671,  2.3014],\n",
       "       [ 0.5784,  0.3104, -0.1139,  0.8107,  0.7019],\n",
       "       ...,\n",
       "       [-2.1552,  0.4353, -0.4627,  1.2715,  0.1498],\n",
       "       [ 0.3152,  1.7536, -0.5597, -0.3541, -1.0691],\n",
       "       [ 0.5532, -1.0568,  0.5438,  1.5662, -1.5297]])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "uuid": "32f5b082-2fcb-4090-80ba-174cc347e519"
   },
   "outputs": [],
   "source": [
    "t = pd.date_range(start='2019/1/1', periods=rows, freq='H')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "uuid": "d52b1a47-3bca-4870-9829-1aef62f0952a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 01:00:00',\n",
       "               '2019-01-01 02:00:00', '2019-01-01 03:00:00',\n",
       "               '2019-01-01 04:00:00', '2019-01-01 05:00:00',\n",
       "               '2019-01-01 06:00:00', '2019-01-01 07:00:00',\n",
       "               '2019-01-01 08:00:00', '2019-01-01 09:00:00',\n",
       "               ...\n",
       "               '2019-07-27 22:00:00', '2019-07-27 23:00:00',\n",
       "               '2019-07-28 00:00:00', '2019-07-28 01:00:00',\n",
       "               '2019-07-28 02:00:00', '2019-07-28 03:00:00',\n",
       "               '2019-07-28 04:00:00', '2019-07-28 05:00:00',\n",
       "               '2019-07-28 06:00:00', '2019-07-28 07:00:00'],\n",
       "              dtype='datetime64[ns]', length=5000, freq='H')"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "uuid": "39075f54-64cb-42c2-9798-be6638636a15"
   },
   "outputs": [],
   "source": [
    "csv_file = open(path + 'data.csv', 'w')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "uuid": "3804898d-dae7-4de0-b0a1-976cd8e43cb3"
   },
   "outputs": [],
   "source": [
    "header = 'date,no1,no2,no3,no4,no5\\n'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "uuid": "3804898d-dae7-4de0-b0a1-976cd8e43cb3"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "csv_file.write(header)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "uuid": "00c96e45-bf91-42d8-b6c9-eb343ee537b7"
   },
   "outputs": [],
   "source": [
    "for t_, (no1, no2, no3, no4, no5) in zip(t, a):  \n",
    "    s = '{},{},{},{},{},{}\\n'.format(t_, no1, no2, no3, no4, no5)  \n",
    "    csv_file.write(s)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "uuid": "00c96e45-bf91-42d8-b6c9-eb343ee537b7"
   },
   "outputs": [],
   "source": [
    "csv_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "uuid": "03523876-01c1-410f-aac5-55fcf8aa0604"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  284643 Jul 27 10:52 /Users/yves/Temp/data/data.csv\n"
     ]
    }
   ],
   "source": [
    "ll $path*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "uuid": "b290e5d3-8e56-4d53-acae-51accd08c4f7"
   },
   "outputs": [],
   "source": [
    "csv_file = open(path + 'data.csv', 'r')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "uuid": "7b1242f5-5892-44bd-a305-addf9daff316"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "date,no1,no2,no3,no4,no5\n",
      "2019-01-01 00:00:00,1.8929,0.3149,-0.2431,0.3221,0.4102\n",
      "2019-01-01 01:00:00,1.1507,0.433,-1.7408,-0.8671,2.3014\n",
      "2019-01-01 02:00:00,0.5784,0.3104,-0.1139,0.8107,0.7019\n",
      "2019-01-01 03:00:00,0.7847,-1.5941,-0.9825,-1.2126,-0.9698\n"
     ]
    }
   ],
   "source": [
    "for i in range(5):\n",
    "    print(csv_file.readline(), end='')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "uuid": "2b2384ca-8927-49e1-8070-33ef0c21a1a9"
   },
   "outputs": [],
   "source": [
    "csv_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "uuid": "00148061-9d3a-4459-b8b8-63c98f14194b"
   },
   "outputs": [],
   "source": [
    "csv_file = open(path + 'data.csv', 'r')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "uuid": "00148061-9d3a-4459-b8b8-63c98f14194b"
   },
   "outputs": [],
   "source": [
    "content = csv_file.readlines()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['date,no1,no2,no3,no4,no5\\n',\n",
       " '2019-01-01 00:00:00,1.8929,0.3149,-0.2431,0.3221,0.4102\\n',\n",
       " '2019-01-01 01:00:00,1.1507,0.433,-1.7408,-0.8671,2.3014\\n',\n",
       " '2019-01-01 02:00:00,0.5784,0.3104,-0.1139,0.8107,0.7019\\n',\n",
       " '2019-01-01 03:00:00,0.7847,-1.5941,-0.9825,-1.2126,-0.9698\\n']"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "content[:5]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "uuid": "2b2384ca-8927-49e1-8070-33ef0c21a1a9"
   },
   "outputs": [],
   "source": [
    "csv_file.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "uuid": "2b2384ca-8927-49e1-8070-33ef0c21a1a9"
   },
   "outputs": [],
   "source": [
    "import csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(path + 'data.csv', 'r') as f:\n",
    "    csv_reader = csv.reader(f)  \n",
    "    lines = [line for line in csv_reader]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['date', 'no1', 'no2', 'no3', 'no4', 'no5'],\n",
       " ['2019-01-01 00:00:00', '1.8929', '0.3149', '-0.2431', '0.3221', '0.4102'],\n",
       " ['2019-01-01 01:00:00', '1.1507', '0.433', '-1.7408', '-0.8671', '2.3014'],\n",
       " ['2019-01-01 02:00:00', '0.5784', '0.3104', '-0.1139', '0.8107', '0.7019'],\n",
       " ['2019-01-01 03:00:00', '0.7847', '-1.5941', '-0.9825', '-1.2126', '-0.9698']]"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lines[:5]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "with open(path + 'data.csv', 'r') as f:\n",
    "    csv_reader = csv.DictReader(f)  \n",
    "    lines = [line for line in csv_reader]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[OrderedDict([('date', '2019-01-01 00:00:00'),\n",
       "              ('no1', '1.8929'),\n",
       "              ('no2', '0.3149'),\n",
       "              ('no3', '-0.2431'),\n",
       "              ('no4', '0.3221'),\n",
       "              ('no5', '0.4102')]),\n",
       " OrderedDict([('date', '2019-01-01 01:00:00'),\n",
       "              ('no1', '1.1507'),\n",
       "              ('no2', '0.433'),\n",
       "              ('no3', '-1.7408'),\n",
       "              ('no4', '-0.8671'),\n",
       "              ('no5', '2.3014')]),\n",
       " OrderedDict([('date', '2019-01-01 02:00:00'),\n",
       "              ('no1', '0.5784'),\n",
       "              ('no2', '0.3104'),\n",
       "              ('no3', '-0.1139'),\n",
       "              ('no4', '0.8107'),\n",
       "              ('no5', '0.7019')])]"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lines[:3]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "uuid": "2b2384ca-8927-49e1-8070-33ef0c21a1a9"
   },
   "outputs": [],
   "source": [
    "!rm -f $path*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SQL Databases"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "uuid": "39c9650b-0430-4e66-b461-faecdb511537"
   },
   "outputs": [],
   "source": [
    "import sqlite3 as sq3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "uuid": "cc01fd41-a6c6-426b-b235-42c903ff6c00"
   },
   "outputs": [],
   "source": [
    "con = sq3.connect(path + 'numbs.db')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "uuid": "9e163352-767b-4888-a286-9a79265bb19b"
   },
   "outputs": [],
   "source": [
    "query = 'CREATE TABLE numbs (Date date, No1 real, No2 real)'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "uuid": "d97dad1a-10cc-43c0-a04a-a5da9b98396b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<sqlite3.Cursor at 0x7f95703009d0>"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "con.execute(query)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "uuid": "cc2e7d31-8239-48b0-b032-f11a514d9349"
   },
   "outputs": [],
   "source": [
    "con.commit()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "q = con.execute  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('table',\n",
       "  'numbs',\n",
       "  'numbs',\n",
       "  2,\n",
       "  'CREATE TABLE numbs (Date date, No1 real, No2 real)')]"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q('SELECT * FROM sqlite_master').fetchall()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "uuid": "6d76f99f-f6bb-4aad-b386-06946366bbe6"
   },
   "outputs": [],
   "source": [
    "import datetime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "uuid": "a37b7780-d824-4558-b12e-9e5dec6b3056"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<sqlite3.Cursor at 0x7f956ffc1030>"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "now = datetime.datetime.now()\n",
    "q('INSERT INTO numbs VALUES(?, ?, ?)', (now, 0.12, 7.3))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "uuid": "5d882442-b6fb-4788-81b8-9f7814a352ae"
   },
   "outputs": [],
   "source": [
    "data = np.random.standard_normal((10000, 2)).round(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "uuid": "58b51e61-ed1a-4c5e-999a-0f55072e5d32"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 90.2 ms, sys: 3.99 ms, total: 94.2 ms\n",
      "Wall time: 94.1 ms\n"
     ]
    }
   ],
   "source": [
    "%%time \n",
    "for row in data:  \n",
    "    now = datetime.datetime.now()\n",
    "    q('INSERT INTO numbs VALUES(?, ?, ?)', (now, row[0], row[1]))\n",
    "con.commit()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "uuid": "667cbd3a-e001-4548-8679-10aec0d31354"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('2020-07-27 10:52:17.748550', 0.12, 7.3),\n",
       " ('2020-07-27 10:52:17.765193', -1.7498, 0.3427),\n",
       " ('2020-07-27 10:52:17.765389', 1.153, -0.2524),\n",
       " ('2020-07-27 10:52:17.765512', 0.9813, 0.5142)]"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q('SELECT * FROM numbs').fetchmany(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "uuid": "667cbd3a-e001-4548-8679-10aec0d31354"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('2020-07-27 10:52:17.765389', 1.153, -0.2524),\n",
       " ('2020-07-27 10:52:17.765512', 0.9813, 0.5142),\n",
       " ('2020-07-27 10:52:17.765717', 0.6727, -0.1044),\n",
       " ('2020-07-27 10:52:17.765764', 1.619, 1.5416)]"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q('SELECT * FROM numbs WHERE no1 > 0.5').fetchmany(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "uuid": "c9217058-4cb9-49b9-b81b-a4c370fce834"
   },
   "outputs": [],
   "source": [
    "pointer = q('SELECT * FROM numbs')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "uuid": "7088d1c6-aed9-457a-a84a-58b1718ad164"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('2020-07-27 10:52:17.748550', 0.12, 7.3)\n",
      "('2020-07-27 10:52:17.765193', -1.7498, 0.3427)\n",
      "('2020-07-27 10:52:17.765389', 1.153, -0.2524)\n"
     ]
    }
   ],
   "source": [
    "for i in range(3):\n",
    "    print(pointer.fetchone())  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('2020-07-27 10:52:17.765512', 0.9813, 0.5142),\n",
       " ('2020-07-27 10:52:17.765587', 0.2212, -1.07),\n",
       " ('2020-07-27 10:52:17.765614', -0.1895, 0.255)]"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rows = pointer.fetchall()  \n",
    "rows[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<sqlite3.Cursor at 0x7f956ffc1c70>"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q('DROP TABLE IF EXISTS numbs')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q('SELECT * FROM sqlite_master').fetchall()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "uuid": "3f80d448-2ff3-4e07-80ce-d8971f367a2c"
   },
   "outputs": [],
   "source": [
    "con.close()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "uuid": "3f80d448-2ff3-4e07-80ce-d8971f367a2c"
   },
   "outputs": [],
   "source": [
    "!rm -f $path*  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Writing and Reading Numpy Arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "uuid": "4e65636e-de0f-49d1-bd67-b63868fb3a3a"
   },
   "outputs": [],
   "source": [
    "dtimes = np.arange('2019-01-01 10:00:00', '2025-12-31 22:00:00',\n",
    "                  dtype='datetime64[m]')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "uuid": "4e65636e-de0f-49d1-bd67-b63868fb3a3a"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3681360"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(dtimes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "uuid": "d5d873f2-4ffa-4fad-a802-9c12a9e30046"
   },
   "outputs": [],
   "source": [
    "dty = np.dtype([('Date', 'datetime64[m]'),\n",
    "                ('No1', 'f'), ('No2', 'f')])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "uuid": "d5d873f2-4ffa-4fad-a802-9c12a9e30046"
   },
   "outputs": [],
   "source": [
    "data = np.zeros(len(dtimes), dtype=dty)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "uuid": "d8cd7ec4-a323-44db-91ba-9a8a9edde1b4"
   },
   "outputs": [],
   "source": [
    "data['Date'] = dtimes  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "uuid": "3f9e6dc3-23c8-46b2-b776-c5f73d22ce04"
   },
   "outputs": [],
   "source": [
    "a = np.random.standard_normal((len(dtimes), 2)).round(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "uuid": "3f9e6dc3-23c8-46b2-b776-c5f73d22ce04"
   },
   "outputs": [],
   "source": [
    "data['No1'] = a[:, 0]  \n",
    "data['No2'] = a[:, 1]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "58901760"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.nbytes  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "uuid": "d783e0e3-0238-49f0-b3cf-655012d25ff3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 4.98 ms, sys: 175 ms, total: 180 ms\n",
      "Wall time: 184 ms\n"
     ]
    }
   ],
   "source": [
    "%time np.save(path + 'array', data)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "uuid": "329fb352-9724-4f9b-98e9-3d0d144c9cf9"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  58901888 Jul 27 10:52 /Users/yves/Temp/data/array.npy\n"
     ]
    }
   ],
   "source": [
    "ll $path*  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "uuid": "b5f60285-80a3-4caa-b528-064b5302464b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1.75 ms, sys: 41 ms, total: 42.7 ms\n",
      "Wall time: 40.5 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([('2019-01-01T10:00',  1.5131,  0.6973),\n",
       "       ('2019-01-01T10:01', -1.722 , -0.4815),\n",
       "       ('2019-01-01T10:02',  0.8251,  0.3019), ...,\n",
       "       ('2025-12-31T21:57',  1.372 ,  0.6446),\n",
       "       ('2025-12-31T21:58', -1.2542,  0.1612),\n",
       "       ('2025-12-31T21:59', -1.1997, -1.097 )],\n",
       "      dtype=[('Date', '<M8[m]'), ('No1', '<f4'), ('No2', '<f4')])"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time np.load(path + 'array.npy')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "uuid": "d10836fb-aa11-4fb9-8c2c-24d46f48b46b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2.37 s, sys: 311 ms, total: 2.68 s\n",
      "Wall time: 2.7 s\n"
     ]
    }
   ],
   "source": [
    "%time data = np.random.standard_normal((10000, 6000)).round(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "480000000"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.nbytes  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "uuid": "2b48a768-2abb-46c1-9499-946e4e43f26e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 35.3 ms, sys: 692 ms, total: 727 ms\n",
      "Wall time: 807 ms\n"
     ]
    }
   ],
   "source": [
    "%time np.save(path + 'array', data)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "uuid": "c0de71b2-0d43-4752-82e4-982cc40fc47a"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  480000128 Jul 27 10:52 /Users/yves/Temp/data/array.npy\n"
     ]
    }
   ],
   "source": [
    "ll $path*   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "uuid": "3bedfde2-d212-40e6-a043-379e416fcc08"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1.26 ms, sys: 265 ms, total: 266 ms\n",
      "Wall time: 265 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[ 0.3066,  0.5951,  0.5826, ...,  1.6773,  0.4294, -0.2216],\n",
       "       [ 0.8769,  0.7292, -0.9557, ...,  0.5084,  0.9635, -0.4443],\n",
       "       [-1.2202, -2.5509, -0.0575, ..., -1.6128,  0.4662, -1.3645],\n",
       "       ...,\n",
       "       [-0.5598,  0.2393, -2.3716, ...,  1.7669,  0.2462,  1.035 ],\n",
       "       [ 0.273 ,  0.8216, -0.0749, ..., -0.0552, -0.8396,  0.3077],\n",
       "       [-0.6305,  0.8331,  1.3702, ...,  0.3493,  0.1981,  0.2037]])"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time np.load(path + 'array.npy')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "uuid": "b5de422d-014e-4f1f-b80c-4c1333920a57"
   },
   "outputs": [],
   "source": [
    "!rm -f $path*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## I/O with pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "uuid": "e0ba11e0-7bdf-4e1f-b8a2-0566cb5ab7a7"
   },
   "outputs": [],
   "source": [
    "data = np.random.standard_normal((1000000, 5)).round(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.4918,  1.3707,  0.137 ,  0.3981, -1.0059],\n",
       "       [ 0.4516,  1.4445,  0.0555, -0.0397,  0.44  ],\n",
       "       [ 0.1629, -0.8473, -0.8223, -0.4621, -0.5137]])"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data[:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SQL Database"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "uuid": "366021ec-1265-4fef-ae96-b280c7f3cd2b"
   },
   "outputs": [],
   "source": [
    "filename = path + 'numbers'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "uuid": "41eac653-cff4-4bab-b27a-18982f4b6159"
   },
   "outputs": [],
   "source": [
    "con = sq3.Connection(filename + '.db')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "uuid": "296ae8af-8da3-4f6d-98bd-2816374d8526"
   },
   "outputs": [],
   "source": [
    "query = 'CREATE TABLE numbers (No1 real, No2 real,\\\n",
    "        No3 real, No4 real, No5 real)'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [],
   "source": [
    "q = con.execute\n",
    "qm = con.executemany"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "uuid": "8c1f7339-7383-4716-b1dc-d18bdd651bfe"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<sqlite3.Cursor at 0x7f956ffb13b0>"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q(query)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "uuid": "c9bd1eba-510d-4b60-89bf-88dd90e96b4f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 7.41 s, sys: 153 ms, total: 7.56 s\n",
      "Wall time: 7.68 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "qm('INSERT INTO numbers VALUES (?, ?, ?, ?, ?)', data)  \n",
    "con.commit()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "uuid": "f2331de4-877b-48fe-aac1-fd823af82b24"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  52633600 Jul 27 10:52 /Users/yves/Temp/data/numbers.db\n"
     ]
    }
   ],
   "source": [
    "ll $path*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "uuid": "36c34da0-f8d8-4bf5-8241-45266a118747"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0.4918, 1.3707, 0.137, 0.3981, -1.0059), (0.4516, 1.4445, 0.0555, -0.0397, 0.44), (0.1629, -0.8473, -0.8223, -0.4621, -0.5137)]\n",
      "CPU times: user 1.37 s, sys: 110 ms, total: 1.48 s\n",
      "Wall time: 1.49 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "temp = q('SELECT * FROM numbers').fetchall()  \n",
    "print(temp[:3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "uuid": "1ed09d3f-24a5-4936-b64c-a205182b5910"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 561 ms, sys: 55.8 ms, total: 617 ms\n",
      "Wall time: 620 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "query = 'SELECT * FROM numbers WHERE No1 > 0 AND No2 < 0'\n",
    "res = np.array(q(query).fetchall()).round(3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "uuid": "d3100151-5563-48ca-8ba6-cc9a623d03cc"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f952d61dd90>]"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "res = res[::100]  \n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(res[:, 0], res[:, 1], 'ro')  \n",
    "# plt.savefig('../../images/ch09/io_01.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### From SQL to pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "uuid": "d446ef85-a7d0-4aba-8b93-d2d60a1aee9b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 1.86 s, sys: 164 ms, total: 2.03 s\n",
      "Wall time: 2.03 s\n"
     ]
    }
   ],
   "source": [
    "%time data = pd.read_sql('SELECT * FROM numbers', con)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "uuid": "052c40c0-6bb7-4084-9e84-da330dca43db"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>No1</th>\n",
       "      <th>No2</th>\n",
       "      <th>No3</th>\n",
       "      <th>No4</th>\n",
       "      <th>No5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.4918</td>\n",
       "      <td>1.3707</td>\n",
       "      <td>0.1370</td>\n",
       "      <td>0.3981</td>\n",
       "      <td>-1.0059</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.4516</td>\n",
       "      <td>1.4445</td>\n",
       "      <td>0.0555</td>\n",
       "      <td>-0.0397</td>\n",
       "      <td>0.4400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.1629</td>\n",
       "      <td>-0.8473</td>\n",
       "      <td>-0.8223</td>\n",
       "      <td>-0.4621</td>\n",
       "      <td>-0.5137</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.3064</td>\n",
       "      <td>0.9125</td>\n",
       "      <td>0.5142</td>\n",
       "      <td>-0.7868</td>\n",
       "      <td>-0.3398</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.1148</td>\n",
       "      <td>-1.5215</td>\n",
       "      <td>-0.7045</td>\n",
       "      <td>-1.0042</td>\n",
       "      <td>-0.0600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      No1     No2     No3     No4     No5\n",
       "0  0.4918  1.3707  0.1370  0.3981 -1.0059\n",
       "1  0.4516  1.4445  0.0555 -0.0397  0.4400\n",
       "2  0.1629 -0.8473 -0.8223 -0.4621 -0.5137\n",
       "3  1.3064  0.9125  0.5142 -0.7868 -0.3398\n",
       "4 -0.1148 -1.5215 -0.7045 -1.0042 -0.0600"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "uuid": "a5f5d023-dfbb-4b54-a622-38a48b3d00a1"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 16.6 ms, sys: 7.19 ms, total: 23.8 ms\n",
      "Wall time: 22.7 ms\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>No1</th>\n",
       "      <th>No2</th>\n",
       "      <th>No3</th>\n",
       "      <th>No4</th>\n",
       "      <th>No5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.1629</td>\n",
       "      <td>-0.8473</td>\n",
       "      <td>-0.8223</td>\n",
       "      <td>-0.4621</td>\n",
       "      <td>-0.5137</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.1893</td>\n",
       "      <td>-0.0207</td>\n",
       "      <td>-0.2104</td>\n",
       "      <td>0.9419</td>\n",
       "      <td>0.2551</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.4784</td>\n",
       "      <td>-0.3333</td>\n",
       "      <td>-0.7050</td>\n",
       "      <td>0.3586</td>\n",
       "      <td>-0.3937</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0.8092</td>\n",
       "      <td>-0.9899</td>\n",
       "      <td>1.0364</td>\n",
       "      <td>-1.0453</td>\n",
       "      <td>0.0579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0.9065</td>\n",
       "      <td>-0.7757</td>\n",
       "      <td>-0.9267</td>\n",
       "      <td>0.7797</td>\n",
       "      <td>0.0863</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       No1     No2     No3     No4     No5\n",
       "2   0.1629 -0.8473 -0.8223 -0.4621 -0.5137\n",
       "5   0.1893 -0.0207 -0.2104  0.9419  0.2551\n",
       "8   1.4784 -0.3333 -0.7050  0.3586 -0.3937\n",
       "10  0.8092 -0.9899  1.0364 -1.0453  0.0579\n",
       "11  0.9065 -0.7757 -0.9267  0.7797  0.0863"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time data[(data['No1'] > 0) & (data['No2'] < 0)].head()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "uuid": "2aa6d1e0-e157-4d5b-8a43-3fc696679511"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 38.6 ms, sys: 12.9 ms, total: 51.5 ms\n",
      "Wall time: 35.7 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "q = '(No1 < -0.5 | No1 > 0.5) & (No2 < -1 | No2 > 1)'  \n",
    "res = data[['No1', 'No2']].query(q)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {
    "uuid": "d46cc119-c34b-4d3f-becd-f625c1a70f78"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(res['No1'], res['No2'], 'ro');\n",
    "# plt.savefig('../../images/ch09/io_02.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "uuid": "7017f5f6-2a19-4d1e-b256-4936081ab91a"
   },
   "outputs": [],
   "source": [
    "h5s = pd.HDFStore(filename + '.h5s', 'w')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {
    "uuid": "eec6ad05-c74e-49e9-bd35-965d56ba3bc9"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 35.8 ms, sys: 41.5 ms, total: 77.3 ms\n",
      "Wall time: 116 ms\n"
     ]
    }
   ],
   "source": [
    "%time h5s['data'] = data  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {
    "uuid": "69057178-872b-4080-8d36-3ea1d9b56b18"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<class 'pandas.io.pytables.HDFStore'>\n",
       "File path: /Users/yves/Temp/data/numbers.h5s"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "h5s  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {
    "uuid": "179c2cf9-9505-4e1a-b6fc-f71429bbfd6d"
   },
   "outputs": [],
   "source": [
    "h5s.close()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {
    "uuid": "f13d24ff-afa4-453c-b098-ce986f0ec341"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 23 ms, sys: 15.8 ms, total: 38.7 ms\n",
      "Wall time: 38 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "h5s = pd.HDFStore(filename + '.h5s', 'r')  \n",
    "data_ = h5s['data']  \n",
    "h5s.close()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_ is data  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "No1    True\n",
       "No2    True\n",
       "No3    True\n",
       "No4    True\n",
       "No5    True\n",
       "dtype: bool"
      ]
     },
     "execution_count": 111,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(data_ == data).all()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {
    "uuid": "96b612da-9d26-498d-9b79-716d0bc9c5fa"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 112,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.allclose(data_, data)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {
    "uuid": "8d68e5ac-7434-4e1c-b5b8-0c6f03171826"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  52633600 Jul 27 10:52 /Users/yves/Temp/data/numbers.db\n",
      "-rw-r--r--  1 yves  staff  48007240 Jul 27 10:52 /Users/yves/Temp/data/numbers.h5s\n"
     ]
    }
   ],
   "source": [
    "ll $path*  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data as CSV File"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "uuid": "7925d095-cbde-430b-b2ef-f0f143df15b8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 5.69 s, sys: 128 ms, total: 5.81 s\n",
      "Wall time: 5.86 s\n"
     ]
    }
   ],
   "source": [
    "%time data.to_csv(filename + '.csv')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total 282872\n",
      "-rw-r--r--  1 yves  staff  43834157 Jul 27 10:52 numbers.csv\n",
      "-rw-r--r--  1 yves  staff  52633600 Jul 27 10:52 numbers.db\n",
      "-rw-r--r--  1 yves  staff  48007240 Jul 27 10:52 numbers.h5s\n"
     ]
    }
   ],
   "source": [
    "ll $path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {
    "uuid": "074e493b-576f-4a3d-a9b5-cafd2045c75c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 417 ms, sys: 68.7 ms, total: 485 ms\n",
      "Wall time: 485 ms\n"
     ]
    }
   ],
   "source": [
    "%time df = pd.read_csv(filename + '.csv')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "uuid": "074e493b-576f-4a3d-a9b5-cafd2045c75c"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[['No1', 'No2', 'No3', 'No4']].hist(bins=20, figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch09/io_03.png');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data as Excel File"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {
    "uuid": "735350dc-e6af-4ee7-8f27-2505b3454682"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 16 s, sys: 279 ms, total: 16.3 s\n",
      "Wall time: 16.5 s\n"
     ]
    }
   ],
   "source": [
    "%time data[:100000].to_excel(filename + '.xlsx')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {
    "uuid": "0d2365b9-28b2-4bb5-8515-4c9ca628ec00"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 6.66 s, sys: 63.9 ms, total: 6.73 s\n",
      "Wall time: 6.75 s\n"
     ]
    }
   ],
   "source": [
    "%time df = pd.read_excel(filename + '.xlsx', 'Sheet1')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {
    "uuid": "0d2365b9-28b2-4bb5-8515-4c9ca628ec00"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkkAAAFuCAYAAACVwYwnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3deXxU5d338U/2dbIASSCELQuHLRA2BRRFQQWlCriAC1ZL64p77X1r69N6P9bH1hWl1aq9pbYuqFh3VFyqorggEPZDCBCSkITJPlknszx/JKJogACZnEnm+3698oKZzJz8Mr8s31znOtcV5PV6EREREZGDBVtdgIiIiIg/UkgSERERaYdCkoiIiEg7FJJERERE2qGQJCIiItIOhSQRERGRdoT66sCGYfQF7gHGmKY58QiPHQvcBGwFRgJ3maa511e1iYiIiByJL0eSTgZeB4I68NhngCWmaf4ZeAV4zId1iYiIiByRz0aSTNN8xTCMaT+8zzCMqcAvaB0xMoD/Nk2zHMgCvhs52gVM91VdIiIiIh3RZXOSDMMIAl4Efmea5v3AauC3be9eDUxq+/8JQLRhGD4LcCIiIiJH0pVBpA/QC1hoGAZt/3e3vW8hcKNhGJmAA9hnmqarC2sTEREROUhXhqRywA78zTTNKsMwegOT297XzzTN3wEYhnEm8M8urEtERETkJ4J8tcGtYRinApcDM4HHgQeBscAVQCEwEHjINM1thmH8Dkinda5SPHCvaZqNPilMREREpAN8FpJEREREujMtJikiIiLSDoUkERERkXb4ZOK23e7w+Tm8xMRoqqoafP1h5CioJ/5JffE/6ol/Ul/8T1f1JCnJ1u7C1912JCk0NMTqEuRH1BP/pL74H/XEP6kv/sfqnnTbkCQiIiLiSwpJIiIiIu1QSBIRERFph0KSiIiISDsUkkRERETaoZAkIiIi0g6FJBEREZF2BExI+vLLL7jiikv49a9vZPfuXQB8881XXHHFJTz33D8sru7QvvhiNRdeeC4lJfuO+Njnn3+Wp556nIce+hOrV3/SBdWJiIj0XAETkiZNmkJW1lAmTz6JIUPSAZg48USysoZy6aU/t7i6Q5sy5WRSUvoe8XFbtmxm3bq1/OpX13LjjbexdOkjOByOLqhQRESkZ/LJtiRH8tJHO/lm+/7jOkZISBBu9/e7n0wclsxFp2ce8/EKC/dy7713069fKr1792Hz5lwWLvwFU6aczPPPP8szzzzF9dffxJYtm6muruK++x4iJCSEp556nJaWFsLCwnA6nVx//U0HjpWamorNFse2bVu56KJL2LJlI9u2bWXhwiuZMuVkXC4Xjz76IImJvairqyMraygzZ56D0+nkvvv+L4mJvejTJ4mGhvoj1v/FF58xatRoAEJDQxk0aDC5ues4+eRTj/k1ERERCWQdGkkyDONLwzD+0/b2oa+LssKAAQP52c/m4Ha7uf76m7jxxtt47bUVAFxyyeXExycwbtwEfvvbPwCQl7cDgGHDhnPddTfyq19dy969e9i1K//AsQBuvvl2Lr3056xYsZwbb7yNW265/cBx33rrdVpaXFx55a9YvPhmnn32f6mqquTNN18jOjqaG264hfnzL6G6uvpAnY8++iAvvvivn9RfVVVJdHT0gdsxMbFUVVX55LUSEREJBB0dSXrXNM0/dNYHvej0zOMa9QFISrJhtx/d6aSoqCiampoO+5iBAwcBkJCQ+JMRnAEDfvq+lhYXf/3rEmy2eOx2O9XV3weT1NQ0AGJjY+nfv/X/Nlvcgefm5++koqKcf/5zGQDp6RlUVFSwe/cu0tIGABAcHEy/fqkHjnnllVcRGvrTtiUm9qKh4ftNAOvr60hMTDzCKyIiIuKfqhzN7KtuIjUh0rIaOhqSsg3D+C8gCvjGNM23D/fgxMToLtmULinJdlSPz8nJ5uOPPz7wPKfTCbgP3LbZIqmtjSApyUZzcwzh4aEH3hcSEkxychwAkZFhJCREExHh5Z57/g/ffvst4eHhFBfvISEhmqQk20HHSkiIJjIy7CfHHTs2m127Yrj11hsAWLVqFdnZQ8nPH86OHTtISrLh8XjYv7+UXr1iSEqyERrqIiwsjNjY2IM+t3POOYulS5eSlGTD5XJRWFjA9OmnEBd3dK/R8TrankjXUF/8j3rin9QX/1BR08j/e24NNXXNvHTvOYSGWDOFuqMh6U+maX5tGEYI8KlhGA7TND891IOrqhoO9a5OcywjSSefPIOvvlrLlVf+kt69+9Dc3MRFF12C3e6gsrKCd999H4fDwcknT+e9996hsLCIlSs/pLa2lpqaWp555l9kZRls2bIVp9PN7bffyWmnzeDmm2/FMEawffsOli9/hYSElAPHmjLlNJYvf4W8PJPVq79h9epPKCws4p13VnHqqWexZcuj3HffA7hcLiIiIsjJmcS0aTNZs+Zrfvvb/4PNFkdERCR///syrrvuJpYsWUJKSgoLFlx20OeWmprOqFE53HPPfTgctVx33U00Nwcd9Wt0PI6lJ+J76ov/UU/8k/riH5qdbu57bh3l1Y0snDWcqsojz8s9XocKx0Fer7fddxyKYRj3AY2mad59qMfY7Y6jO+gx0Bez/1FP/JP64n/UE/+kvljP4/Gy9NVNbNhZztTR/bj98omUl9f5/OMmJdmC2rv/iONXhmEMMwxj0Q/uygJ2dlZhIiIiIgAvfpjHhp3ljBicyMKzDIKC2s0uXaYjp9tqgdmGYaQCcUAh8IJPqxIREZGAsmptIR98W0T/PjFcNyfbsnlIP3TEkGSa5j5gbhfUIiIiIgFofZ6dFz/IIy4mnJsuHE10pCXLOP6E9TFNREREAtae0lr+9sYWwkKDuemC0fSJj7K6pAMUkkRERMQSFTVNLHl5Iy0tHq4+dyRD+sVZXdJBFJJERESkyzU0uXjklVxq6p3Mn57F2KFJVpf0EwETkjZsWMfixVdxzTW/wOVyAbB/fxl//OMfuOOO29i5M++Qz92+fRuLF1/F0qWPdFW5IiIiPZbL7eHx1zdTbK/n9HH9OWNCmtUltStgQlJOzjjGjh1PcHAwS5Y8CEBycgqzZs1m6tRpZGZmHfK5u3btJCdnXFeVKiIi0mN5vV7+8e52tuyuZHRGby6ekWX5pf6HYsn08Vd3vsX6/ZuO6xghwUG4Pd+vWTk2OZt5mbOP+Lzbb7+Tu+/+HStXvsWsWd8/vqGhnqVLHyE1tT+lpaWceOIkpk6dBsDZZ/+Mv//9b8dVr4iIiMDrq3fz+aZSBve1cc15IwkJ9t/xGv+4xq4LRUZGcu+997N48VUHjR49++wzpKUN5JJLFuJ0Opk/fw5jxowjLs6/JpGJiIh0V5/m7uONz/fQJz6Smy4cQ2S4f8cQS6qblzm7Q6M+h3M8y8enpvbnzjt/z1133cG117ZuLpufn8fs2ecBEB4ejs1mo7i4kLi4kcdVp4iIiMCmXRU8+65JTGQot1w0hviYcKtLOiL/HePysQkTTmDOnHksWfIAAJmZQykuLgLA6XTicDhISxtoZYkiIiI9QkGpg7++tpng4CBuvGA0/XrHWF1ShwRMSMrN3UBu7npWrHiJxsZGABYsuIyxY8cDsHDhFRQW7mXZsqd5+OH7ufXW32Czte4KvHLlW+TmrmfLlk28/vqrln0OIiIi3U15dSOPvJyL0+nmqp+NICstweqSOizI6/Ue+VFHyW53dP5Bf0S7Nfsf9cQ/qS/+Rz3xT+pL56tvauHef35LSUUDF0/P4oyJA47q+V3Vk6QkW7uX1wXMSJKIiIh0nRaXm8dWbKKkooEzJw446oDkDxSSREREpFN5vF6efmsbOwqrmTAsmYtOz7S6pGOikCQiIiKd6pWP8/lm+36y0uL51ezhBPvpYpFHopAkIiIineaDtYW8+/Ve+vaK5obzRxMWGmJ1ScdMIUlEREQ6xbemnRc+yCMuJpxbLhpDbFSY1SUdF4UkEREROW47i2t48s0thIeFcPOFo0lKiLK6pOPm3+uBd6ING9bx9NNP4HK5WLr0SUJDQ9m/v4ynnnqcujoHixZd0+4mt2vWrObjjz9k8OB08vPzmDbt9AN7uomIiAiUVNTz6Csbcbu9XH/BKAb37RlbegXMSFJOzjjGjh1PcHAwS5Y8CEBycgqzZs1m6tRp7QYkgLKyMhYtuppLLlnI9dffxD33/B6Px9OVpYuIiPitKkczDy3Ppa6xhctnGozO6GN1SZ3GkpEk+8sv4lj7zXEdoyAkGLf7+7BimzCRpAsXHPF5t99+J3ff/TtWrnyLWbO+3z+uoaGepUsfITW1P6WlpZx44iSmTp3GnDnnH3iMx+MlMjKKYD/esVhERKSrNDS5ePilXCpqm5g7dQinjEm1uqROFTCn274TGRnJvffez+LFVx00evTss8+QljaQSy5ZiNPpZP78OYwZM464uO+HDJ9//h/ccsvtVpQtIiLiV1oXi9xIkb2O08b1Z/aUwVaX1OksCUlJFy7o0KjPYY9xHEuVp6b25847f89dd93BtdfeAEB+fh6zZ58HQHh4ODabjeLiQuLiRgLw/PP/JD09k2nTph9X3SIiIt2dx+PlyTe3YhZWM95I4tIZQwnqpmshHU7AnjeaMOEE5syZx5IlDwCQmTmU4uIiAJxOJw6Hg7S0gQAsW/Y0KSkpzJ59HuvWraWmptqyukVERKzk9Xp57oMdfGvaMQYkcNXPRhAc3PMCEgTQ6bbc3A3k5q6nsbGRRYuuJioqigULLiMvbwcACxdewWOPPcyyZU9TVlbGrbf+BpvNxssvv8grryxn8OAh/Pvfr1Bebufhh/9CfHz32cVYRESks7z1xR4+XldMWlIMN5yf3a0XizySIK/X2+kHtdsdnX/QH9Fuzf5HPfFP6ov/UU/8k/pyZJ/m7mPZyu30jovkzoXjSbRF+PTjdVVPkpJs7Q6FBezpNhEREem49Xl2/vHudmKjwrh1/hifByR/oJAkIiIih5VXVM0Tr28hLDSYmy4cTb/eMVaX1CUUkkREROSQiu11B1bTvm5ONhmp8VaX1GUUkkRERKRdlbVNPPRSLvVNLq48exijM3pbXVKXUkgSERGRn6hrbOGhl3KpcjRzwbQMTsruZ3VJXU4hSURERA7S3OLm0RUb2Vdez4wJacw6caDVJVkiYNZJ2rBhHU8//QQul4ulS58kNDSU/fvLeOqpx6mrc7Bo0TXtbnK7e/cuHn/8McaMyaGoqIiUlBSuuOKXFnwGIiIivudye3j8tc3sLKrhhOHJLJie1SNX0+6IgBlJyskZx9ix4wkODmbJkgcBSE5OYdas2UydOq3dgATQ0uLk3HPncumlP+f22+9g+fLnsdv3d2XpIiIiXcLj9fK/b29jY34Fo9J78cvZIwgO0IAEFo0kffFRPru2H1/QCA4JxuP2HLidPiyZKadnHPF5t99+J3ff/TtWrnyLWbNmH7i/oaGepUsfITW1P6WlpZx44iSmTp3G0KHDGDp0GAAVFeVER0djs8Ud6vAiIiLdktfr5flVO/hyaxmZ/eO5fk42oSEBM5bSroA53fadyMhI7r33fhYvvuqg0aNnn32GtLSBXHLJQpxOJ/Pnz2HMmHHExbUGohUrXuL991dyyy23ExkZaVX5IiIiPvH66t181LbdyE0XjiYivOduN9JRloSkKadndGjU53COZ6ny1NT+3Hnn77nrrju49tobAMjPz2P27PMACA8Px2azUVxcSFzcSADOP/8iZs8+j1/84lL69etPRkbmcdUvIiLiL1atLeSNz/eQlBDJrfNziIkMs7okvxCw42gTJpzAnDnzWLLkAQAyM4dSXFwEgNPpxOFwkJY2kI8//oB9+4oBiIiIIDGxF6WlJZbVLSIi0pnWbC7lhQ/yiI8J57YFY0mI7fnbjXRUwJxuy83dQG7uehobG1m06GqioqJYsOAy8vJ2ALBw4RU89tjDLFv2NGVlZdx662+w2WyEh0fwt7/9hczMoVRVVZCRkcmkSVMs/mxERESO34ad5fz97W1ER4Ry6/wckhOirC7JrwR5vd5OP6jd7uj8g/6Idmv2P+qJf1Jf/I964p8CrS/m3ioeeimXIOC2BTlkpSVYXdJPdFVPkpJs7V7CF7Cn20RERALV3jIHj67YiMfj5fp52X4ZkPyBQpKIiEgAKats4KHlG2hqdrNo9nCy0wNrP7ajoZAkIiISIKoczTzw4gZqG1q49MyhTBrR1+qS/JpCkoiISACoa2zhweUbqKhtYs7UIZw+Ls3qkvyeQpKIiEgP19js4uGXcg9sWPuzKYOtLqlbUEgSERHpwZwtbh5bsZHdJbVMGdU3oDesPVoBE5I2bFjH4sVXcc01v8DlcgGwf38Zf/zjH7jjjtvYuTPvsM8vKNjDGWecwueff9YV5YqIiBw3l9vDX/69me17qxlvJHHl2cMCesPaoxUwISknZxxjx44nODiYJUseBCA5OYVZs2Yzdeq0g/Zx+7Hm5iaee+4f2opERES6DbfHw5NvbGHTrgpGpffi6nNHEhIcML/2O4UlK25XFa+ioXrrcR2jNDgYt8dz4HZ0wggS+59xxOfdfvud3H3371i58i1mzZp94P6GhnqWLn2E1NT+lJaWcuKJk5g6dRoATz75V6644pfce+/dx1WziIhIV/B4vSx7ZztrTTtDByRw/dxsQkMUkI5WwGxL8p3IyEjuvfd+Fi++6qDRo2effYa0tIFccslCnE4n8+fPYcyYcXz++adkZ48hNbW/hVWLiIh0jNfr5flVO/h8cylD+tm46YLRRISFWF1Wt2RJSErsf0aHRn0O53iWKk9N7c+dd/6eu+66g2uvvQGA/Pw8Zs8+D4Dw8HBsNhvFxYWsX/8tAwYM4p//XEZZWRn/+c+HuFwtnHrq6cdVv4iIiC+s+GQXH60rJi0phlsuyiEqIuDGQzpNwL5yEyacwJw581iy5AF++ctryMwcSnFxEQBOpxOHw0Fa2kDuvPP3B57z1VdfMG3adE46aapVZYuIiBzSW1/s4Z0vC0hJjOK2BWOJjQqzuqRurcMnKA3DiDIMY6NhGA/4siBfyc3dQG7uelaseInGxkYAFiy4jLFjxwOwcOEVFBbuZdmyp3n44fu59dbfYLPZDjz/xRf/RVlZKR999D6bNuVa8jmIiIgcyqq1hbz66S56x0Xw6wVjiY8Jt7qkbi/I6/V26IGGYTwI9AHspmn++nCPtdsdHTvocQi03Zq7A/XEP6kv/kc98U/duS+f5e7jmZXbiY8J578vG0dKYrTVJXWKrupJUpKt3XUROjSSZBjGQuBzYHdnFiUiIiLH5+ttZSx7dzuxUWH8ekFOjwlI/uCIc5IMwxgBDDdN807DMEZ35KCJidGEhvp+Jn1Sku3ID5IupZ74J/XF/6gn/qm79eXrraU89eZWoiJC+b9XTyFzQILVJXU6K3tyxNNthmH8FggBnMAMIBx41TTNRw71HJ1uC0zqiX9SX/yPeuKfultftu2p5OGXNxIcBLfOz2FoDw1IVp5uO+JIkmmaf/zu/4ZhRAKxhwtIIiIi4ls7CqtZsmIj4OWG88f0yIDkD47m6rbzgVOASYZhXOy7kkRERORQdhbX8PDLubjdXq6bk83IIb2sLqnH6vA6SaZprgBW+LAWEREROYzdJbU8/NIGWlo8XDtnJDlZfawuqUcLmMUkN2xYx9NPP4HL5WLp0icJDQ1l//4ynnrqcerqHCxadE27m9yWlOzjtttuoFev3gAYxnBuuOGWri5fREQC3N4yBw8t30CT081VPxvJeCPZ6pJ6vIAJSTk54xg7djzffvsNS5Y8yG23/RfJySnMmjWb0tKSdgPSdy677ArOPvtnXVitiIjI94rsdTzw4gYamlwsmj2cE0ekWF1SQLAkJK0stLOpsu64jhESEozb7TlwO7tXLLMGJB3xebfffid33/07Vq58i1mzZh+4v6GhnqVLHyE1tT+lpaWceOIkpk6dBsDnn39KdXUV9fX1zJhxFkOGpB9X7SIiIh1VUlHPAy+sp66xhStmDWPKqH5WlxQwAmYk6TuRkZHce+/9LF581UGjR88++wxpaQO55JKFOJ1O5s+fw5gx40hISGTRomtIT8+gsrKCq6++kv/93+cO2rJERETEF8oqG/jzC+upbWhh4ZlDOWVMqtUlBRRLQtKsAUkdGvU5nONZOyE1tT933vl77rrrDq699gYA8vPzmD37PADCw8Ox2WwUFxcyfPhI0tMzAOjVqzeJib3YuXPHgT3fREREfMFe3cifX1hPTZ2Ti6dncdq4NKtLCjgdXgKgp5kw4QTmzJnHkiWt+/VmZg6luLgIAKfTicPhIC1tICtXvkV+/k4AXC4Xdvt++vVTkhcREd+pqGni/hfWU+Vo5sJpGZwxcYDVJQWkgDndlpu7gdzc9TQ2NrJo0dVERUWxYMFl5OXtAGDhwit47LGHWbbsacrKyrj11t9gs9lITk7hH//4O1lZQykqKuSXv7yGvn11PlhERHyjytHM/S+sp7ymiblThzBr0iCrSwpYR9yW5FhoW5LApJ74J/XF/6gn/skf+lJT18yfnl9PaWUDs6cMZt4pgX2hkNXbkgTs6TYRERF/Utvg5IEXN1Ba2cDMEwcyd+oQq0sKeApJIiIiFqttcHL/C+spLq9nxoQ0LpyWQVBQu4Mb0oUUkkRERCx0ICDZ65k+Po2Lp2cpIPkJhSQRERGL/DggXTJDAcmfKCSJiIhYQAHJ/ykkiYiIdDEFpO5BIUlERKQLKSB1HwpJIiIiXUQBqXtRSBIREekCCkjdj0KSiIiIjykgdU8KSSIiIj6kgNR9KSSJiIj4iAJS9xZqdQEiIiI9UU29kwdeVEDqzhSSREREOlmVo5kHXlxPSUUDM8ancbECUrekkCQiItKJKmub+PML69lf1cjMEwdqs9puTCFJRESkk9irG7n/hfWU1zQxe8pg5k4dooDUjSkkiYiIdIKyqgbuf2E9lbXNzJk6hHNPGmJ1SXKcFJJERESOU0lFPX9+YT01dU4unJbBrEmDrC5JOoFCkoiIyHEostfxwAvrqW1oYcH0LM6cOMDqkqSTKCSJiIgco71lDh54cQN1jS0sPHMop41Ls7ok6UQKSSIiIsdgd0ktDy3fQEOTiytmDeOUMalWlySdTCFJRETkKO0sruHhlzbQ5HSzaPZwpozqZ3VJ4gMKSSIiIkfB3FvFIy9vpMXl4epzR3LC8BSrSxIfUUgSERHpoK17Knn0lY24PV6unTOK8UaS1SWJDykkiYiIdMD6PDuPv7YZgOvnZZOT2cfiisTXFJJERESO4MutpTz95jZCQ4O44fzRjBzcy+qSpAsoJImIiBzGfzYU8893TSIjQrnlwjFkpsVbXZJ0EYUkERGRQ3j3q7289PFOYqPCuG1+DoP62qwuSbqQQpKIiMiPeL1eXl+9mzc+30OiLYJfL8ihX+8Yq8uSLqaQJCIi8gNer5flH+3k/W8KSUqI5NcLxpKUEGV1WWIBhSQREZE2Ho+XZ9/bzqe5JaT2ieG2+Tkk2iKsLkssopAkIiICuNwennxzC19v28+gFBu3zh+DLTrc6rLEQgpJIiIS8Fpcbu5d9jXfbNtPZlo8N18whuhI/YoMdPoKEBGRgNbkdPHYik1sK6hi5OBEFs8bTUR4iNVliR9QSBIRkYBV19jCkpdzyd9Xy6RRfbly5jDCQoOtLkv8hL4SREQkIFU5mvnTc+vI31fL5JEp/PflExWQ5CAaSRIRkYBTVtnAAy9uoKK2iRnj01gwI4uQEAUkOZhCkoiIBJSCUgcPvbQBR0MLc6cOYfaUwQQFBVldlvghhSQREQkY2wuqeHTFRpqdbhaeOZTTxqVZXZL4MYUkEREJCOt22Hni9S14vV6uPm8kJwxPsbok8XMKSSIi0uN9tnEfy1ZuJzw0hMXzRjNySC+rS5JuQCFJRER6tJVfFfDyx/nERIZy80VjyEiNt7ok6SYUkkREpEfyer28/J983v1qL4m2CG6dn0P/PjFWlyXdyBFDkmEYwcCbwFdAOJAB/MI0zUYf1yYiInJM3B4P/3jXZPXGEvr2iua2+Tn0jo+0uizpZjo6krTGNM17AAzDeB2YBzzns6pERESOUYvLzROvb2F9XjmD+tq45aIxxGmjWjkGRwxJpml6gO8CUiiQBpg+rktEROSo1Te18NiKTeworGb4oEQWz8smKkIzS+TYBHm93g490DCMs4BbgK9M0/z94R7rcrm9oaHaHFBERLqOvaqRPzy9hr2lDk4ak8qtF48jPEy/i6RD2l1NtMMh6TuGYTwLfGma5l8P9Ri73XF0Bz0GSUk27HaHrz+MHAX1xD+pL/5HPel8RfY6Hn4plypH84FtRoKPchVt9cX/dFVPkpJs7X6xdGTi9ghgiGmab7fdtRtI78TaREREjpm5t4rHVmyiodnFhadlMPOEgdpmRDpFR07UNgOLDMMYC4QBw4EbfVqViIhIB6zdvp8n39yC1wu/mj2CyaP6Wl2S9CAdmbidT+vVbCIiIn7jw2+LeH7VDsLDQ1g8N1uraEun05R/ERHpVrxeLys+2cU7XxYQFxPOLReOYVBfm9VlSQ+kkCQiIt2Gy+3hmXe2s2ZLKSmJUdw6P4ekhCiry5IeSiFJRES6hcZmF399bTNbdleSnhrHTReMxqZFIsWHFJJERMTv1dQ7eeSlXArKHIzJ6M01540iIlxrIIlvKSSJiIhfK6mo5+GXcimvaeKUMf1YeJZBSHCw1WVJAFBIEhERv/XDNZDOO3kI5540WGsgSZdRSBIREb+0Zksp//v2NgAWnTOck7L7WVyRBBqFJBER8Ster5e3vtjDvz/bTVREKIvnjmL4YK2BJF1PIUlERPyGy+3h2fdMVm8soXdcJDdfNIb+fWKsLksClEKSiIj4hYYmF399bRNb91QxuK+Nmy4YTXxshNVlSQBTSBIREctV1jbx8Mu5FNvrycnsw9XnjtQl/mI5hSQREbFUQamDR17JpabOyfTxaVw8PYvgYF3BJtZTSBIREctszC/n8de24Gxxs2B6FmdOHGB1SSIHKCSJiIglPl5fzL/eNwkNCea6uaMYbyRbXZLIQRSSRESkS9VHSo4AABzGSURBVHk8XpZ/tJNVawuxRYdx4wWjyUiNt7oskZ9QSBIRkS7T2Ozib29sYWN+Bal9YrjxgtEkJ0RZXZZIuxSSRESkS5RXN7JkxUaK7fWMSu/FNeeOIjpSv4bEf+mrU0REfG5nUQ2PvboRR0MLM8anMX96pjapFb+nkCQiIj61Zkspz7yzDY8HLjtzKKePS7O6JJEOUUgSERGf8Hi9vPbZbt76Yg9REaFcN2cUI4doDzbpPhSSRESk0zW3uPn7W1tZa9pJSojkpgvGkKo92KSbUUgSEZFOVV3XzKOvbGRPqYOhafFcPy8bW3S41WWJHDWFJBER6TQFpQ4eXbGRKkczJ2X35fKzhhEWqgna0j0pJImISKdYu30/T7+9lZYWDxdOy2DmiQMJCtIebNJ9KSSJiMhx8Xi9vLF6N298voeIsBCun5fNuKFJVpclctwUkkRE5Jg1OV08/dY21u2w0yc+khvPH01acqzVZYl0CoUkERE5JvbqRh5bsZEiez3DBiZw7ZxRmqAtPYpCkoiIHLVtBVU8/tpm6hpbmD6udQXt0BBN0JaeRSFJREQ6zOv18tG6Yl74II+gIPj5TINTc/pbXZaITygkiYhIh7jcHv71/g4+zd1HXHQY183NZuiABKvLEvEZhSQRETmi2nonf/n3JvKKahiYEssN80bTOz7S6rJEfEohSUREDqug1MFjr26ksraZE4Ync+XZw4kIC7G6LBGfU0gSEZFD+nJLKctWbqfF5eH8U9M5e9IgLRApAUMhSUREfsLl9vDyx/msWltIZHgIN5w/mpysPlaXJdKlFJJEROQgNfVOnnhtM2ZhNf16R7N4Xjb9esdYXZZIl1NIEhGRA/L31fDXf2+mytHMeCOJX5w9nKgI/aqQwKSvfBERAeCTDcU8t2oHbo9XG9SKoJAkIhLwWlwenltl8mluCTGRoVxz3ihGDulldVkillNIEhEJYJW1Tfzl35vZXVLLwJRYFs/Npk9ClNVlifgFhSQRkQC1vaCKx1/fjKOhhSmj+nL5WQbhWv9I5ACFJBGRAOP1eln1TSEvfZxPUBBcduZQThvbX/OPRH5EIUlEJIA0Nrt4ZuV21m7fT3xMONfNHUVWmvZfE2mPQpKISIAo2l/HX17bTFllA1lp8Vxz3igSbRFWlyXitxSSREQCwOebSvjneyZOl4eZJw5k3inphIYEW12WiF9TSBIR6cFaXG6eW5XHp7n7iIoIZfG5Ixk3NMnqskS6BYUkEZEean9VA399bTN7y+oYmBLLdXNGkZwYbXVZIt2GQpKISA+0boedv7+9jcZmF6eMSeXSM7IIC9Xl/SJHQyFJRKQHcbk9vPrJLt79ei/hocEsOmc4J2X3s7oskW5JIUlEpIeocjTzxOubySuqIaVXNNfPGUVacqzVZYl0WwpJIiI9wJY9lTz1xhZqG1qYOCyZK2YNIypCP+JFjoe+g0REujG3x8Nrn+3mnTUFBAcHcfGMLGaMT9Pq2SKd4IghyTCMDOAeYB2QBlSYpvk/vi5MREQOr7K2iSfe2MLOohqSEiK55rxRDOkXZ3VZIj1GR0aSegEvmqb5OoBhGFsNw3jbNM1vfVuaiIgcyoa8cv7+9lbqm1xMHJbMz2cOIzpSJwdEOtMRv6NM0/zmR3cFA/W+KUdERA7H5fbw8sf5rFpbSFhoMJfPNDh1TKpOr4n4QJDX6+3wgw3DmAtMM03zpsM9zuVye0O1HoeISKcqKa/nz/9ay87CatKSY/mvyycyWKfXRDpDu39ldHhs1jCM04DTgJuP9NiqqoaOl3WMkpJs2O0On38c6Tj1xD+pL/7nWHry9bYylq3cTpPTzcnZ/bj0jKFEhAapt51I3yv+p6t6kpRka/f+DoUkwzDOAaYCNwH9DMMYZJrmms4rT0RE2uNscfPCh3l8smEfEWEh/Gr2CCaP6mt1WSIBoSNXt40HlgNrgY+BGOAvgEKSiIgPFdvreOKNLRTb6xmYHMs1c0bRt5f2XhPpKh2ZuP0toCVbRUS6iNfr5aN1xbz08U5aXB5OG9efBadnau81kS6m60VFRPxIbb2TZ97ZRm5+BbFRYVxz7kjGDk2yuiyRgKSQJCLiJzbvquDpt7dRW+9kxOBEFp0zgkRbhNVliQQshSQREYu1uNy88p9drFpbSEhwEBedlsmZJwwgWGsfiVhKIUlExELF5fX87fUtFNnr6Nc7mqt+NpJBfdu/HFlEupZCkoiIBbxeLx+vL2b5R62Ts6flpDJ/ehYRYZqcLeIvFJJERLpYTV0zj63YxIad5cRGhXH1uSMZp8nZIn5HIUlEpAvl7izn2fdMqhzNDB+UyC9na3K2iL9SSBIR6QJNThfLP9rJJxv2ERoSrMnZIt2AQpKIiI/lFVXz9FtbsVc3kZYUy28un0BsWLDVZYnIESgkiYj4SIvLw+urd7PyqwIAzp40iPNOHkJqv3htpCrSDSgkiYj4QNH+Op58cytF9jqSEiL55ewRZKUlWF2WiBwFhSQRkU7k8Xh575u9/PvTXbjcXk7NSWX+6ZlEhuvHrUh3o+9aEZFOYq9u5O9vbWVHUQ1xMeFcOWsYYzL7WF2WiBwjhSQRkePk9Xr5bGMJL3yYR7PTzQQjiYVnGdiiw60uTUSOg0KSiMhxqKhpYtm729myu5KoiFB+NXsEk0amEKRL+0W6PYUkEZFj8N3o0Ysf5tHkdDMqvRdXzBxGr7hIq0sTkU6ikCQicpQqappYtnIbW/ZUERURwpVnD+Pk7H4aPRLpYRSSREQ6yOv18mnuPpZ/tJMmp5vs9N78fKah0SORHkohSUSkA8prGvnHyu1to0eh/OLs4ZyU3VejRyI9mEKSiMhheL1ePsndx0tto0ejM3rz85nDtCmtSABQSBIROYTymkaWrdzO1rbRo0XnDGfKKI0eiQQKhSQRkR/xeLx8+G0Rr366i+YWjR6JBCqFJBGRHyjaX8czK7ezu6SWmMhQLjtTo0cigUohSUQEaHG5efOLAlZ+WYDb42XSiBQWTM8iLkarZosEKoUkEQl4OwqrWbZyO6WVDfSKi+DyswxGZ2jPNZFAp5AkIgGrocnFK5/k85/1xQQBM8anMfeUdKIi9KNRRBSSRCRArd9h55/vm1TXOenfJ4YrZg0jo3+81WWJiB9RSBKRgFLlaOaFD3aw1rQTGhLE3KlDmDVpEKEhwVaXJiJ+RiFJRAKCx+Plw3VF/PvTXTQ53WSlxXPFrGH06x1jdWki4qcUkkSkx9tdUsuz75oUlDmIiQzl8pkGp4xJJViX9YvIYSgkiUiP1dDUwquf7uLjdcV4gSmj+nLRaZm6rF9EOkQhSUR6HK/Xy1fbynjxw53U1jvp1zuahWcaDBuUaHVpItKNKCSJSI9SWtnAP98z2VZQRVhoMPNOSWfmiQM1MVtEjppCkoj0CC0uN2+vKeCdLwtwub1kp/fm0jOHkpwQZXVpItJNKSSJSLeXu7OcFz7IY391Iwmx4VwyYyjjjSTttyYix0UhSUS6rbKqBl74II+N+RUEBwVxxoQBzJk6RCtmi0in0E8SEel2mp1u3lqzh/e+3ovL7WXYwAQuOWMoaUmxVpcmIj2IQpKIdBter5dvtu9n+Uc7qXI0k2iLYP7pmUwclqxTayLS6RSSRKRbKLLX8fyqHWzfW01oSBDnTB7E7MmDiQgPsbo0EemhFJJExK81NLl4ffVuPvy2CI/Xy+iM3lw8I4uUxGirSxORHk4hSUT8ksfjZfWmEl79JJ/ahhaSE6JYMCOLnMw+VpcmIgFCIUlE/M62giqWf5jH3v11hIe1Lgh51gkDCAvVqTUR6ToKSSLiN8oqG3jp452szysHWvdaO//UDBJtERZXJiKBSCFJRCzX0NTCG5/v4cNvi3B7vGSmxXPx9CyG9IuzujQRCWAKSSJiGbfHwycb9vHaZ7upa2yhT3wkF56WyQStli0ifkAhSUQssWlXBcs/2sm+8noiw0O4YFoGZ0xI07wjEfEbCkki0qUK99fx8n92snlXJUFBcMqYVOaekk58TLjVpYmIHEQhSUS6REVNE699tosvNpfiBYYPSmTB9CwGJGsrERHxTwpJIuJT9U0tvL2mgA/WFuFye0hLiuXC0zIYNaSX5h2JiF9TSBIRn2hxufnw22LeXrOH+iYXveIimDs1nckj+xIcrHAkIv5PIUlEOpXH42XNllJe+2wXFbXNREeEcuFpGcwYr0nZItK9KCSJSKfwer1s3l3Jyx/nU2SvIzQkmJknDOTsyYOIjQqzujwRkaN2xJBkGEZf4B5gjGmaE31fkoh0N3lF1bz6yS7MwmqCaF0pe+7UdHrHR1pdmojIMevISNLJwOtAjo9rEZFuZk9pLf/+dDebdlUAMDqjN/NOSWdgis3iykREjt8RQ5Jpmq8YhjGtC2oRkW6i2F7Ha5/t5tsddgCGDUxg3ikZZKbFW1yZiEjn8cmcpMTEaEK7YIJmUpL+WvU36ol/6qy+lJTX8/z72/lkXRFeLxgDE1k4azijs/rocv6jpO8V/6S++B8re+KTkFRV1eCLwx4kKcmG3e7w+ceRjlNP/FNn9KWytok3v9jD6o0luD1e0pJimXdKOmMyexMUFER5eV0nVRsY9L3in9QX/9NVPTlUENPVbSJySFWOZlZ+VcB/1u/D5faQ0iuauVOHMGFYMsEaORKRHq4jV7edCiwE+hmG8TvgQdM0G31emYhYpsrRzDtfFvDJhtZw1DsuknNPHsyUUX0JCQ62ujwRkS7RkYnbnwCfdEEtImKxytom3v6ygM9y9+Fye+kTH8k5kwdxUnY/QkMUjkQksOh0m4hQXtPIO1/u5bPcfbg9XpISIpk9eTCTR/VVOBKRgKWQJBLAyqsbeWtNAZ9vap2QnZwQxewpg5k0MkXhSEQCnkKSSAAqq2zgnS8L+GJzKW6Pl5TE78OR5hyJiLRSSBIJIAWlDt7+soBvt+/HC/TtFc3PThrMCcOTFY5ERH5EIUmkh/N6vZh7q3h7TQGbd1cCMDAllrMnDWKCkUxwsC7lFxFpj0KSSA/l8XrJ3VnOqhfWs72gCgBjQALnTB7EyCG9tEK2iMgRKCSJ9DAut4dvtu3nnS8LKC6vByAnsw9nTx5EZn/trSYi0lEKSSI9RJPTxeqNJbz/TSHlNU0EBwUxeWRfLp01nOhQjRqJiBwthSSRbq6ytokP1xXxyfp9NDS7CAsN5vRx/Zl5wkD6JERpPyoRkWOkkCTSTRWUOnj/m718vW0/bo+XuOgw5pw8hGnj+hMXHW51eSIi3Z5Ckkg34vF62ZRfwXtf72X73moAUvvEcObEAUwemUJYaIjFFYqI9BwKSSLdgLPFzRdbSln1TSElFQ0AjBicyFknDGSUrlQTEfEJhSQRP1Ze08jH64v5LLeEusYWQoKDOGlUX86YOICBKTaryxMR6dEUkkT8jNfrZVtBFR9+W8SGneV4vRAbFcY5kwdx+rg0Em0RVpcoIhIQFJJE/EST08WazaV8uK6YfW3rGw3qa2PG+DROGJ6s+UYiIl1MIUnEYqWVDXy0rojPN5XQ2OwmJDiISSNSmD4+jfTUOM03EhGxiEKSiAVcbg+5Oyv4ZEPxgf3U4mPDOWviQE7NSSU+VqfURESsppAk0oXKqxv5dOM+PttYQk2dE4DMtHhmjE9j3NAkQkOCLa5QRES+o5Ak4mNuT+uo0X82FLNlVyVeICoilOnj0zg1J5W0pFirSxQRkXYoJIn4SHlNI5/mlvDZxn0HRo0y+scxLac/E4YlExGmidgiIv5MIUmkE7W4POTuLOezjSVs3lXx/ajRuLZRo2SNGomIdBcKSSLHyev1UlDm4PONpXy5tZT6JhcAGalxnJrTn4nDNWokItIdKSSJHKPaeidfbill9aYSiuyt6xrFxYQz84SBnJTdl/6aayQi0q0pJIkcBZfbw8b8Cj7fVMLG/ArcHi8hwUGMN5I4Kbsf2em9CAnWFWoiIj2BQpLIEXi9XvL31fLVljK+3l6Go6EFgIEpsZyc3Y8TR6Rgiw63uEoREelsCkkih7CvvJ4vt5bx1dZS7NVNANiiwzhjwgBOyu6rDWZFRHo4hSSRH6hyNPPV1jK+3FrK3rI6ACLCQpg8MoVJI/syYnCiTqeJiAQIhSQJeHWNLazbYefLLaWYe6vxAiHBQYzJ6M2kkX3JyexDRLiuThMRCTQKSRKQHA1O1ueV8832/WwvqMLt8QKQlRbPpJF9mWAkaZ6RiEiAU0iSgFHb4GTdDjtrt+9ne0E1Hm9rMBrU18bEYcmcMCyZPglRFlcpIiL+QiFJerTaeifffheM9lbRlosY0i+OCcOSmGAkk6RgJCIi7VBIkh6nrLKB9XnlrM+zs7O45kAwykiNY7yRzIRhSfSJVzASEZHDU0iSbs/j9bJrXy3r8+xsyCunpKIBgCAgIy2eCUOTGG8k0zs+0tpCRUSkW1FIkm7J2eJma0EVG/LsbNhZQW29E4Dw0GDGZvUhJ6sPYzL6EBejydciInJsFJKk27BXN7JpVwWb8ivYtrcKZ4sHaF3g8eTR/Rib1YcRg3tpM1kREekUCknit1pcbszCajblV7JpVwWllQ0H3tevdzQ5mX0Ym5VEemocwcFBFlYqIiI9kUKS+JX9VQ1s2tUairYXVOF0tY4WRYSFkJPZh+yM3mQP6aVL9UVExOcUksRSNfVOthVUsm1PFdsKqiivaTrwvtQ+MWSn9yI7vTdZaQmEhWo7EBER6ToKSdKlGptdmHur2VpQybaCKort9QfeFx0RytisPmSn9yY7vbeuRhMREUspJIlPNTld5BfXYhZWsW1PFbtLHAdWug4LDWbk4ESGD+7F8EGJDEqxaW6RiIj4DYUk6VS1DU7yCmvIK6pmR2E1e8vqDoSi4KAghqTaGD6oFyMGJZLRP16n0ERExG8pJMkx83q9VNQ0saOomh2FNewqqaVof92B94cEt4aioWkJDB3Q+hYVoS85ERHpHvQbSzqssdnFnpJadpXUsmtf61tN2yKOAFERIYwcnEjWgASGpiWQnhpHuNYsEhGRbkohSdrl8XjZV15P/r6a1kBUUss+ez3eHzwm0RbB+KFJZKXFkzUggfEj+1FZWX/IY4qIiHQnCkmCy+1hX3k9BWUO9pbWUbDfQWFZHc0t7gOPCQ8LJmtAAhmpcaSnxpGeGk+iLeKg44SEaH6RiIj0HApJAabZ6abQXsfeMgcFpQ72ltVRXF6Hy/39GFFwUBD9ekczpF8c6f3jSO8XR/+kGEKCFYJERCRwKCT1UC0uD6WVDRSX11Fsr6fYXs++8nrs1Y0HnTILDQlmQHIsA1NsDEqxMTDFRlpSjOYSiYhIwFNI6uaanW7Kqhooq2pkX3k9xfY6isvrKatsPHDp/Xdio8IYOiCBASmxDGoLRX17RxOq02QiIiI/oZDUDbjcHuzVjZRVNlJa2cD+qgZKK1uDUZWj+SePj4oIJb1/HP37xHz/lhRLXEy4BdWLiIh0TwpJfsDj8VLlaKa8ppHymiYqapoor2k6cLuytvkno0IAveMiGDE4kZTEaFISo0htC0MJseEEBWnlahERkeOhkORjLreH6rpmquucVDuav/9/XTOVta1hqMrRjNvz0xAEEB8bTnr/OPomRpPSK4q+vaJJSYwmOTFK84ZERER8qEMhyTCMGcA8YD/gNU3zbp9W5cc8Xi8NTS4cDU7qGluoa2jB0dhy0O3ahhaq65qpcjRT19hy2OMlxIYzpF8cfeIj6d321ic+kj7xUfSOiyAsVEFIRETECkcMSYZhRANPACNN02w2DGOFYRjTTdP80PflHTuv14vXCy1uDy0uD84Wd+v/Wzw4XR5aXO7W+10enC43Tc1uGp0uGptdNDa72/5te3O6aWp20dDsoq6xhXbOfP1EZHgICbERDEhuPf2VEBvR+maL+MHtcIUgERERP9WRkaTJQIFpmt/NEP4cOAewLCQ9/smHlEcldf6Bg4DItrcDQgkmlGgiiAb6HOUhm4BS3JTSAN4GqKX1TURERA7L5q7jmnHjiIyIPPKDfaAjISkZcPzgdm3bfYeUmBhNqA9HSEI8HsK8Lp8dX0RERKwX6nGRnGQjwo9D0n7A9oPbcW33HVJVVcPx1HREV512BklJNux2x5EfLF1GPfFP6ov/UU/8k/rif77vyeHn93bGx2lPR1YRXAMMMgzju426TgLe7qS6RERERPzSEUOSaZoNwLXAo4Zh3ANs9PdJ2yIiIiLHq0NLAJimuQpY5eNaRERERPyGNu0SERERaYdCkoiIiEg7FJJERERE2qGQJCIiItIOhSQRERGRdigkiYiIiLRDIUlERESkHQpJIiIiIu1QSBIRERFph0KSiIiISDuCvF6v1TWIiIiI+B2NJImIiIi0QyFJREREpB0KSSIiIiLtUEgSERERaYdCkoiIiEg7FJJERERE2hFqdQFHyzCMGcA8YD/gNU3zbotL6lEMw8gA7gHWAWlAhWma/2MYRi/gPmAXkAXcaZpmWdtzbgfigETgfdM032i7Pwe4HtgNJAO/Nk3TZRhGJPAAUNx2rPtM09zRhZ9mt2QYRhTwFa2v8a/VE+sZhmEAFwONwKnAH4CdqC+WaXuNBwPltL5mi4Ao1JMuZRhGX1p/l4wxTXNi231d8jPLMIzLgLGAG8g3TfNvx/p5dKuRJMMwooEngFtM0/wDMNowjOnWVtXj9AJeNE3zftM0bwIWGIYxHrgX+MA0zfuA12j94sQwjBOB00zTvAu4BXjQMIwEwzCCgH8Bd5mmeS+tX6w/b/sYNwN7TdP8f8DDwN+78PPrzu4B1v/gtnpiIcMwQoCHgP8xTfNPtP4y3o36Ypm2X8x3ADeYpvl7IIbWP6rVk653MvA6EPSD+3zeB8Mw0oBf0xqmfgP80jCMrGP9JLpVSAImAwWmaTa33f4cOMfCenoc0zS/MU3z9R/cFQzU0/o6r2m774ev++zv7jdNswXYBpwCpANRpmmWtvOcc37wnE3AGMMw4nzyCfUQhmEspPU13P2Du9UTa02k9RfADYZh3AH8jNbRC/XFOg2Ak9YRCYBYYAvqSZczTfMVwPGju7uiD2cB35qm+d1K2WuAWcf6eXS3kJTMwS96bdt94gOGYcwF3jNNczsHv/a1QKJhGKEcuieH65X6eBQMwxgBDDdN89UfvUs9sdYgWv9wW9b21+wptP6Vq75YxDTNWuB2YLlhGMuAIlpPf6on/qEr+tCp/eluIWk/YPvB7bi2+6STGYZxGnAarUOfcPBrHwdUmabp4tA9OVyv1MejMxdoMgzjv2kdwj7BMIybUU+sVgtsN02zpu32amAa6otl2uav3A6cY5rmFbSO7P0f1BN/0RV96NT+dLeQtAYYZBhGRNvtk4C3LaynRzIM4xxahyxvAvoahjGZ1td5cttDfvi6v/Xd/W1/EYwAPqV1Yl5j2xyBHz/n7R88JxvIbfsLUNphmuYfTdP8n7bz+KuBr03TfAT1xGpfAb3b5iZB68jSDtQXK/UHKtt+8QKUAJGoJ/6iK/rwHjC+bT4TbY9ZeawFd7sNbg3DOAO4ALADLbq6rXO1TdL+BFjbdlcM8BfgDeBPQAGQAfz3j65KSGx7W/mjqxJuaHtOL76/KiGK1gl7JUAmcK+uDjkywzDOp/Uqj3Bae/Ie6oml2k5Jn07rz6OBtL62UagvlmgLrI8CTUA1MIrWCb7NqCddyjCMU4HLgZnA48CDdNH3RtvVbRNonei943iubut2IUlERESkK3S3020iIiIiXUIhSURERKQdCkkiIiIi7VBIEhEREWmHQpKIiIhIOxSSRERERNqhkCQiIiLSDoUkERERkXb8f7+7Cu63FAg+AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.cumsum().plot(figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch09/io_04.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {
    "uuid": "0f0f0a19-994c-43ff-940f-9cd05b94a0cd"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  43834157 Jul 27 10:52 /Users/yves/Temp/data/numbers.csv\n",
      "-rw-r--r--  1 yves  staff  52633600 Jul 27 10:52 /Users/yves/Temp/data/numbers.db\n",
      "-rw-r--r--  1 yves  staff  48007240 Jul 27 10:52 /Users/yves/Temp/data/numbers.h5s\n",
      "-rw-r--r--  1 yves  staff   4012715 Jul 27 10:53 /Users/yves/Temp/data/numbers.xlsx\n"
     ]
    }
   ],
   "source": [
    "ll $path*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {
    "uuid": "638a2e35-0a12-41be-9743-c7f4f4afcb23"
   },
   "outputs": [],
   "source": [
    "rm -f $path*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fast I/O with PyTables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {
    "uuid": "b671c317-5247-4a6b-94c9-0ee2850decba"
   },
   "outputs": [],
   "source": [
    "import tables as tb  \n",
    "import datetime as dt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Working with Tables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {
    "uuid": "4f7391d1-2f86-4913-af4d-2c603c970605"
   },
   "outputs": [],
   "source": [
    "filename = path + 'pytab.h5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {
    "uuid": "4f7391d1-2f86-4913-af4d-2c603c970605"
   },
   "outputs": [],
   "source": [
    "h5 = tb.open_file(filename, 'w')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {
    "uuid": "60a374d2-b78c-4473-b17a-69982fd27a4c"
   },
   "outputs": [],
   "source": [
    "row_des = {\n",
    "    'Date': tb.StringCol(26, pos=1),  \n",
    "    'No1': tb.IntCol(pos=2),  \n",
    "    'No2': tb.IntCol(pos=3),  \n",
    "    'No3': tb.Float64Col(pos=4),  \n",
    "    'No4': tb.Float64Col(pos=5)  \n",
    "    }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {
    "uuid": "28c4dabe-bfbe-4a90-bd60-072c2e8f1aa1"
   },
   "outputs": [],
   "source": [
    "rows = 2000000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {
    "uuid": "027696b8-2e1b-489f-8cb6-c24c6c3702ee"
   },
   "outputs": [],
   "source": [
    "filters = tb.Filters(complevel=0)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {
    "uuid": "027696b8-2e1b-489f-8cb6-c24c6c3702ee"
   },
   "outputs": [],
   "source": [
    "tab = h5.create_table('/', 'ints_floats',  \n",
    "                      row_des,  \n",
    "                      title='Integers and Floats',  \n",
    "                      expectedrows=rows,  \n",
    "                      filters=filters)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tables.table.Table"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(tab)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {
    "uuid": "71ce6940-bde4-437f-9daa-f2f577f3cd7e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "/ints_floats (Table(0,)) 'Integers and Floats'\n",
       "  description := {\n",
       "  \"Date\": StringCol(itemsize=26, shape=(), dflt=b'', pos=0),\n",
       "  \"No1\": Int32Col(shape=(), dflt=0, pos=1),\n",
       "  \"No2\": Int32Col(shape=(), dflt=0, pos=2),\n",
       "  \"No3\": Float64Col(shape=(), dflt=0.0, pos=3),\n",
       "  \"No4\": Float64Col(shape=(), dflt=0.0, pos=4)}\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (2621,)"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {
    "uuid": "3830afd0-0a7b-439a-81b2-c81194deb7a5"
   },
   "outputs": [],
   "source": [
    "pointer = tab.row  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {
    "uuid": "493096c9-7a8e-4342-b7c3-9390cbc03c6b"
   },
   "outputs": [],
   "source": [
    "ran_int = np.random.randint(0, 10000, size=(rows, 2))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {
    "uuid": "493096c9-7a8e-4342-b7c3-9390cbc03c6b"
   },
   "outputs": [],
   "source": [
    "ran_flo = np.random.standard_normal((rows, 2)).round(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "uuid": "a15c64b5-17f2-4e11-b051-a6d68ba4bf7f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 7.04 s, sys: 54.4 ms, total: 7.09 s\n",
      "Wall time: 7.11 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for i in range(rows):\n",
    "    pointer['Date'] = dt.datetime.now()  \n",
    "    pointer['No1'] = ran_int[i, 0]  \n",
    "    pointer['No2'] = ran_int[i, 1]  \n",
    "    pointer['No3'] = ran_flo[i, 0]  \n",
    "    pointer['No4'] = ran_flo[i, 1]  \n",
    "    pointer.append()  \n",
    "tab.flush()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {
    "uuid": "0d0739a9-79a3-410a-abf0-20f6b8cef8c5"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "/ints_floats (Table(2000000,)) 'Integers and Floats'\n",
       "  description := {\n",
       "  \"Date\": StringCol(itemsize=26, shape=(), dflt=b'', pos=0),\n",
       "  \"No1\": Int32Col(shape=(), dflt=0, pos=1),\n",
       "  \"No2\": Int32Col(shape=(), dflt=0, pos=2),\n",
       "  \"No3\": Float64Col(shape=(), dflt=0.0, pos=3),\n",
       "  \"No4\": Float64Col(shape=(), dflt=0.0, pos=4)}\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (2621,)"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {
    "uuid": "cff18aaa-9959-41a9-8f05-8ba42192368c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  100156248 Jul 27 10:53 /Users/yves/Temp/data/pytab.h5\n"
     ]
    }
   ],
   "source": [
    "ll $path*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {
    "uuid": "2b81e6f0-86a1-429f-8d7c-ac4bbdcdd616"
   },
   "outputs": [],
   "source": [
    "dty = np.dtype([('Date', 'S26'), ('No1', '<i4'), ('No2', '<i4'),\n",
    "                                 ('No3', '<f8'), ('No4', '<f8')])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {
    "uuid": "2b81e6f0-86a1-429f-8d7c-ac4bbdcdd616"
   },
   "outputs": [],
   "source": [
    "sarray = np.zeros(len(ran_int), dtype=dty)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {
    "uuid": "15ef6c1c-c760-4bdd-9e1b-fe46c108abf8"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([(b'', 0, 0, 0., 0.), (b'', 0, 0, 0., 0.), (b'', 0, 0, 0., 0.),\n",
       "       (b'', 0, 0, 0., 0.)],\n",
       "      dtype=[('Date', 'S26'), ('No1', '<i4'), ('No2', '<i4'), ('No3', '<f8'), ('No4', '<f8')])"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sarray[:4]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {
    "uuid": "87071ae4-4ff2-402e-8746-037fee04b07c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 90.8 ms, sys: 26.6 ms, total: 117 ms\n",
      "Wall time: 117 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "sarray['Date'] = dt.datetime.now()  \n",
    "sarray['No1'] = ran_int[:, 0]  \n",
    "sarray['No2'] = ran_int[:, 1]  \n",
    "sarray['No3'] = ran_flo[:, 0]  \n",
    "sarray['No4'] = ran_flo[:, 1]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {
    "scrolled": true,
    "uuid": "992c3894-7eb7-4699-9e6b-2a6fb4e6eabf"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 32.8 ms, sys: 31.3 ms, total: 64 ms\n",
      "Wall time: 65.2 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "/ints_floats_from_array (Table(2000000,)) 'Integers and Floats'\n",
       "  description := {\n",
       "  \"Date\": StringCol(itemsize=26, shape=(), dflt=b'', pos=0),\n",
       "  \"No1\": Int32Col(shape=(), dflt=0, pos=1),\n",
       "  \"No2\": Int32Col(shape=(), dflt=0, pos=2),\n",
       "  \"No3\": Float64Col(shape=(), dflt=0.0, pos=3),\n",
       "  \"No4\": Float64Col(shape=(), dflt=0.0, pos=4)}\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (2621,)"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "h5.create_table('/', 'ints_floats_from_array', sarray,\n",
    "                      title='Integers and Floats',\n",
    "                      expectedrows=rows, filters=filters)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tables.file.File"
      ]
     },
     "execution_count": 143,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(h5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {
    "uuid": "a7616365-19cf-4cbb-a6a0-01c3b88cb457"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "File(filename=/Users/yves/Temp/data/pytab.h5, title='', mode='w', root_uep='/', filters=Filters(complevel=0, shuffle=False, bitshuffle=False, fletcher32=False, least_significant_digit=None))\n",
       "/ (RootGroup) ''\n",
       "/ints_floats (Table(2000000,)) 'Integers and Floats'\n",
       "  description := {\n",
       "  \"Date\": StringCol(itemsize=26, shape=(), dflt=b'', pos=0),\n",
       "  \"No1\": Int32Col(shape=(), dflt=0, pos=1),\n",
       "  \"No2\": Int32Col(shape=(), dflt=0, pos=2),\n",
       "  \"No3\": Float64Col(shape=(), dflt=0.0, pos=3),\n",
       "  \"No4\": Float64Col(shape=(), dflt=0.0, pos=4)}\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (2621,)\n",
       "/ints_floats_from_array (Table(2000000,)) 'Integers and Floats'\n",
       "  description := {\n",
       "  \"Date\": StringCol(itemsize=26, shape=(), dflt=b'', pos=0),\n",
       "  \"No1\": Int32Col(shape=(), dflt=0, pos=1),\n",
       "  \"No2\": Int32Col(shape=(), dflt=0, pos=2),\n",
       "  \"No3\": Float64Col(shape=(), dflt=0.0, pos=3),\n",
       "  \"No4\": Float64Col(shape=(), dflt=0.0, pos=4)}\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (2621,)"
      ]
     },
     "execution_count": 144,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "h5  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {
    "uuid": "f498bb1c-ef46-4ee9-956d-21f292687323"
   },
   "outputs": [],
   "source": [
    "h5.remove_node('/', 'ints_floats_from_array')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {
    "uuid": "e99634bc-effd-43ee-ac2e-4b66b925433b"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([(b'2020-07-27 10:53:08.092338', 8576, 5991, -0.0528, 0.2468),\n",
       "       (b'2020-07-27 10:53:08.092410', 2990, 9310, -0.0261, 0.3932),\n",
       "       (b'2020-07-27 10:53:08.092417', 4400, 4823,  0.9133, 0.2579)],\n",
       "      dtype=[('Date', 'S26'), ('No1', '<i4'), ('No2', '<i4'), ('No3', '<f8'), ('No4', '<f8')])"
      ]
     },
     "execution_count": 146,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab[:3]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {
    "uuid": "d84a41bd-36d3-4e11-8a4d-44440551a493"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0.2468,  0.3932,  0.2579, -0.5582])"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab[:4]['No4']  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {
    "uuid": "f7616601-4e98-42cc-9935-c855877d178c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 45.2 ms, sys: 58.6 ms, total: 104 ms\n",
      "Wall time: 121 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "88.8542999999997"
      ]
     },
     "execution_count": 148,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time np.sum(tab[:]['No3'])  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {
    "uuid": "9061ed32-44db-4c13-a44a-92b313b4af40"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 40.2 ms, sys: 31.5 ms, total: 71.7 ms\n",
      "Wall time: 78.7 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "133349920.3689251"
      ]
     },
     "execution_count": 149,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time np.sum(np.sqrt(tab[:]['No1']))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {
    "uuid": "558b4627-15f8-4a8f-8d5a-fc7213ee074e"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 111 ms, sys: 30.6 ms, total: 142 ms\n",
      "Wall time: 146 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(array([1.00000e+00, 0.00000e+00, 2.00000e+00, 2.00000e+01, 1.10000e+02,\n",
       "        3.80000e+02, 1.32900e+03, 4.13500e+03, 1.09250e+04, 2.58570e+04,\n",
       "        5.34720e+04, 9.70230e+04, 1.55324e+05, 2.16504e+05, 2.66456e+05,\n",
       "        2.87214e+05, 2.73180e+05, 2.26867e+05, 1.65167e+05, 1.06402e+05,\n",
       "        5.99730e+04, 2.96140e+04, 1.28280e+04, 4.93100e+03, 1.64700e+03,\n",
       "        4.64000e+02, 1.29000e+02, 4.00000e+01, 5.00000e+00, 1.00000e+00]),\n",
       " array([-5.6489 , -5.28648, -4.92406, -4.56164, -4.19922, -3.8368 ,\n",
       "        -3.47438, -3.11196, -2.74954, -2.38712, -2.0247 , -1.66228,\n",
       "        -1.29986, -0.93744, -0.57502, -0.2126 ,  0.14982,  0.51224,\n",
       "         0.87466,  1.23708,  1.5995 ,  1.96192,  2.32434,  2.68676,\n",
       "         3.04918,  3.4116 ,  3.77402,  4.13644,  4.49886,  4.86128,\n",
       "         5.2237 ]),\n",
       " <a list of 30 Patch objects>)"
      ]
     },
     "execution_count": 150,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%time\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.hist(tab[:]['No3'], bins=30);  \n",
    "# plt.savefig('../../images/ch09/io_05.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [],
   "source": [
    "query = '((No3 < -0.5) | (No3 > 0.5)) & ((No4 < -1) | (No4 > 1))'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [],
   "source": [
    "iterator = tab.where(query)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 177 ms, sys: 64.9 ms, total: 242 ms\n",
      "Wall time: 197 ms\n"
     ]
    }
   ],
   "source": [
    "%time res = [(row['No3'], row['No4']) for row in iterator]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.7694, 1.4866],\n",
       "       [0.9201, 1.3346],\n",
       "       [1.4701, 1.8776]])"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = np.array(res)  \n",
    "res[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {
    "uuid": "705d91ca-dc94-4db1-84d7-164fb5f5f1af"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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eph9fU3tV65dWbMdx92PsRtz81hbOF0/DwCN80J5ZhY/u/DjRqDkdE6yl+IB6ucZp4KabjUTG71lI8pPThPmSEUsaN5GN0rqt76msXMn+s+dBSq/aH5gvg8wqvX/N01g6wtt7LuraT8LS4v4xB98GYo1z64o9cengAKeNKNkAvhZjPlRQGdypADgk8yTilQqvmu5HCCR32oODuLnz38b+R/+ANtf+Yv2YyeAWrGIjWfmAaBxvDWHhqGsfdx4DXN0FD9/9luex/zGMfvCMtDXD2xuwti7ryPnC+v7VlhaxOD8HNStulPW75f1oKln6kglQacO7hQtvm/pw/csnfi+pVOvv29MNiciIiKKAQMpIiIiooAYSBEREREFxECKiIiIKCAGUkREREQBMZAiIiIiCoiBFBEREVFADKSIiIiIAmIgRURERBQQAykiIiKigBhIEREREQXEQIqIiIgoIAZSRERERAExkCIiIiIKiIEUERERUUAMpIiIiIgCYiBFREREFBADKSIiIqKAGEgRERERBcRAioiIiCggBlJEREREATGQIiIiIgooH8VGNE37dQD/FsAVAKau61+PYrtERERESRZ6RErTtAEAfwbg93Vd/yMABzRNezDsdomIiIiSLoqpvYMA/kHX9crWv88CeCiC7RIRERElWhRTe7cDWLf9e23rNqGRkQHk87kIXjqZxseHur0LFADft/The5ZOfN/Sie+bsygCqSsA7H/d4a3bhK5fL0fwssk0Pj6Eq1fXvR9IicL3LX34nqUT37d06vX3zS2IjGJq778A+EeaphW2/n0IwGsRbJeIiIgo0UIHUrqulwE8DuBFTdO+CeBHuq6/HnrPiIiIiBIukvIHuq7/ZwD/OYptEREREaUFC3ISERERBcRAioiIiCggBlJEREREATGQIiIiIgqIgRQRERFRQAykiIiIiAJiIEVEREQUEAMpIiIiooAYSBEREREFxECKiIiIKCAGUkREREQBMZAiIiIiCoiBFBEREVFADKSIiIiIAmIgRURERBQQAykiIiKigBhIEREREQXEQIqIiIgoIAZSRERERAExkCIiIiIKiIEUERERUUAMpIiIiIgCYiBFREREFFC+2zuQZoWlRQycPIGcfh7o6wNu3gT270fh934flanp6F/n/QswJvei/NSX2rY/eOxpbH/lZaBSARQFAGDsLaH8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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(res.T[0], res.T[1], 'ro');\n",
    "# plt.savefig('../../images/ch09/io_06.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {
    "uuid": "a9e8e16c-9af5-48dc-bf5c-39b353f5c09b"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Max              5.224\n",
      "Ave              0.000\n",
      "Min             -5.649\n",
      "Std              1.000\n",
      "CPU times: user 72.7 ms, sys: 46.1 ms, total: 119 ms\n",
      "Wall time: 117 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "values = tab[:]['No3']\n",
    "print('Max %18.3f' % values.max())\n",
    "print('Ave %18.3f' % values.mean())\n",
    "print('Min %18.3f' % values.min())\n",
    "print('Std %18.3f' % values.std())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {
    "uuid": "6cfb0992-c393-45b0-999b-b242ea9c1ce6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 63 ms, sys: 33.4 ms, total: 96.4 ms\n",
      "Wall time: 59 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "res = [(row['No1'], row['No2']) for row in\n",
    "        tab.where('((No1 > 9800) | (No1 < 200)) \\\n",
    "                & ((No2 > 4500) & (No2 < 5500))')]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {
    "uuid": "6cfb0992-c393-45b0-999b-b242ea9c1ce6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 4870)\n",
      "(9803, 5026)\n",
      "(9846, 4859)\n",
      "(9823, 5069)\n"
     ]
    }
   ],
   "source": [
    "for r in res[:4]:\n",
    "    print(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 159,
   "metadata": {
    "uuid": "399c76db-4f79-4264-b25f-50eab32303e0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 39.7 ms, sys: 33.5 ms, total: 73.1 ms\n",
      "Wall time: 53.2 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "res = [(row['No1'], row['No2']) for row in\n",
    "        tab.where('(No1 == 1234) & (No2 > 9776)')]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {
    "uuid": "399c76db-4f79-4264-b25f-50eab32303e0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1234, 9841)\n",
      "(1234, 9821)\n",
      "(1234, 9867)\n",
      "(1234, 9987)\n",
      "(1234, 9849)\n",
      "(1234, 9800)\n"
     ]
    }
   ],
   "source": [
    "for r in res:\n",
    "    print(r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Working with Compressed Tables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {
    "uuid": "4e6ac124-2500-47c5-9478-2eaaba25ea00"
   },
   "outputs": [],
   "source": [
    "filename = path + 'pytabc.h5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {
    "uuid": "4e6ac124-2500-47c5-9478-2eaaba25ea00"
   },
   "outputs": [],
   "source": [
    "h5c = tb.open_file(filename, 'w') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {
    "uuid": "830338b0-ec10-4f95-8058-62b1858b46b7"
   },
   "outputs": [],
   "source": [
    "filters = tb.Filters(complevel=5,  \n",
    "                     complib='blosc')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "metadata": {
    "uuid": "d11f1cdc-c54a-49f3-992d-b76f7cad5a4a"
   },
   "outputs": [],
   "source": [
    "tabc = h5c.create_table('/', 'ints_floats', sarray,\n",
    "                        title='Integers and Floats',\n",
    "                        expectedrows=rows, filters=filters)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [],
   "source": [
    "query = '((No3 < -0.5) | (No3 > 0.5)) & ((No4 < -1) | (No4 > 1))'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [],
   "source": [
    "iteratorc = tabc.where(query)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "uuid": "62ea755e-493b-4230-96ad-0ce7a0a33acc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 177 ms, sys: 62.3 ms, total: 239 ms\n",
      "Wall time: 206 ms\n"
     ]
    }
   ],
   "source": [
    "%time res = [(row['No3'], row['No4']) for row in iteratorc]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.7694, 1.4866],\n",
       "       [0.9201, 1.3346],\n",
       "       [1.4701, 1.8776]])"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "res = np.array(res)\n",
    "res[:3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "uuid": "f4e1df40-c747-49a2-815c-f1cbd33f621d"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 29.8 ms, sys: 41.1 ms, total: 70.9 ms\n",
      "Wall time: 70.9 ms\n"
     ]
    }
   ],
   "source": [
    "%time arr_non = tab.read()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {
    "uuid": "f4e1df40-c747-49a2-815c-f1cbd33f621d"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100122200"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tab.size_on_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100000000"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr_non.nbytes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "uuid": "f7428798-5946-49be-88b1-d67d26a41e70"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 34.4 ms, sys: 52 ms, total: 86.4 ms\n",
      "Wall time: 132 ms\n"
     ]
    }
   ],
   "source": [
    "%time arr_com = tabc.read()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {
    "uuid": "f4e1df40-c747-49a2-815c-f1cbd33f621d"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "99995584"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tabc.size_on_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100000000"
      ]
     },
     "execution_count": 174,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arr_com.nbytes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {
    "uuid": "e21f417f-f123-41b5-b26b-ecebbbaa5c85"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  200312336 Jul 27 10:53 /Users/yves/Temp/data/pytab.h5\n",
      "-rw-r--r--  1 yves  staff  100030880 Jul 27 10:53 /Users/yves/Temp/data/pytabc.h5\n"
     ]
    }
   ],
   "source": [
    "ll $path*  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {
    "uuid": "ea7dd80f-44d8-4cd9-a16f-308a302dd460"
   },
   "outputs": [],
   "source": [
    "h5c.close()  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "uuid": "ee67fc74-5820-4037-b8d9-281c74435160"
   },
   "source": [
    "### Working with Arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {
    "uuid": "ee67fc74-5820-4037-b8d9-281c74435160"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.03 ms, sys: 23.3 ms, total: 26.3 ms\n",
      "Wall time: 36.6 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "arr_int = h5.create_array('/', 'integers', ran_int)  \n",
    "arr_flo = h5.create_array('/', 'floats', ran_flo)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {
    "uuid": "c91c089b-4727-4928-8069-2f74ab1f2c61"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "File(filename=/Users/yves/Temp/data/pytab.h5, title='', mode='w', root_uep='/', filters=Filters(complevel=0, shuffle=False, bitshuffle=False, fletcher32=False, least_significant_digit=None))\n",
       "/ (RootGroup) ''\n",
       "/floats (Array(2000000, 2)) ''\n",
       "  atom := Float64Atom(shape=(), dflt=0.0)\n",
       "  maindim := 0\n",
       "  flavor := 'numpy'\n",
       "  byteorder := 'little'\n",
       "  chunkshape := None\n",
       "/integers (Array(2000000, 2)) ''\n",
       "  atom := Int64Atom(shape=(), dflt=0)\n",
       "  maindim := 0\n",
       "  flavor := 'numpy'\n",
       "  byteorder := 'little'\n",
       "  chunkshape := None\n",
       "/ints_floats (Table(2000000,)) 'Integers and Floats'\n",
       "  description := {\n",
       "  \"Date\": StringCol(itemsize=26, shape=(), dflt=b'', pos=0),\n",
       "  \"No1\": Int32Col(shape=(), dflt=0, pos=1),\n",
       "  \"No2\": Int32Col(shape=(), dflt=0, pos=2),\n",
       "  \"No3\": Float64Col(shape=(), dflt=0.0, pos=3),\n",
       "  \"No4\": Float64Col(shape=(), dflt=0.0, pos=4)}\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (2621,)"
      ]
     },
     "execution_count": 178,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "h5  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {
    "uuid": "5bf3d20c-0dd1-447f-b7ca-34adb0e9a2c6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-rw-r--r--  1 yves  staff  262344490 Jul 27 10:53 /Users/yves/Temp/data/pytab.h5\n",
      "-rw-r--r--  1 yves  staff  100030880 Jul 27 10:53 /Users/yves/Temp/data/pytabc.h5\n"
     ]
    }
   ],
   "source": [
    "ll $path*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {
    "uuid": "3dfffbc8-ab8e-4c6e-9e18-316d220e51a0"
   },
   "outputs": [],
   "source": [
    "h5.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {
    "uuid": "2a157cb2-dcc1-44fe-b4da-658bbe2b6ebb"
   },
   "outputs": [],
   "source": [
    "!rm -f $path*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Out-of-Memory Computations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {
    "uuid": "e241b3b2-bfe1-45b4-9e85-0b39586ca42a"
   },
   "outputs": [],
   "source": [
    "filename = path + 'earray.h5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "metadata": {
    "uuid": "e241b3b2-bfe1-45b4-9e85-0b39586ca42a"
   },
   "outputs": [],
   "source": [
    "h5 = tb.open_file(filename, 'w') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {
    "uuid": "dd0e24b0-d0cc-4cb0-90e0-7c6445dcb1d2"
   },
   "outputs": [],
   "source": [
    "n = 500  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {
    "uuid": "dd0e24b0-d0cc-4cb0-90e0-7c6445dcb1d2"
   },
   "outputs": [],
   "source": [
    "ear = h5.create_earray('/', 'ear',  \n",
    "                      atom=tb.Float64Atom(),  \n",
    "                      shape=(0, n))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tables.earray.EArray"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(ear)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-1.25983231,  1.11420699,  0.1667485 ,  0.7345676 ],\n",
       "       [-0.13785424,  1.22232417,  1.36303097,  0.13521042],\n",
       "       [ 1.45487119, -1.47784078,  0.15027672,  0.86755989],\n",
       "       [-0.63519366,  0.1516327 , -0.64939447, -0.45010975]])"
      ]
     },
     "execution_count": 187,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rand = np.random.standard_normal((n, n))  \n",
    "rand[:4, :4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {
    "uuid": "4dabef84-39ca-4dd4-a8ab-edc65d340965"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 551 ms, sys: 765 ms, total: 1.32 s\n",
      "Wall time: 1.71 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for _ in range(750):\n",
    "    ear.append(rand)  \n",
    "ear.flush()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {
    "uuid": "4dd0218f-b9ca-4ee5-8a1f-af071e346c55"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "/ear (EArray(375000, 500)) ''\n",
       "  atom := Float64Atom(shape=(), dflt=0.0)\n",
       "  maindim := 0\n",
       "  flavor := 'numpy'\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (16, 500)"
      ]
     },
     "execution_count": 189,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ear"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {
    "uuid": "58694407-5d44-400d-99a1-252ea1595514"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1500032000"
      ]
     },
     "execution_count": 190,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ear.size_on_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {
    "uuid": "f29bef2e-37fb-4f47-83fd-ef09041f2f77"
   },
   "outputs": [],
   "source": [
    "out = h5.create_earray('/', 'out',\n",
    "                      atom=tb.Float64Atom(),\n",
    "                      shape=(0, n))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {
    "uuid": "f29bef2e-37fb-4f47-83fd-ef09041f2f77"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 192,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out.size_on_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {
    "uuid": "aedc7c36-5839-4df5-8391-f0620b2c1381"
   },
   "outputs": [],
   "source": [
    "expr = tb.Expr('3 * sin(ear) + sqrt(abs(ear))')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "metadata": {
    "uuid": "aedc7c36-5839-4df5-8391-f0620b2c1381"
   },
   "outputs": [],
   "source": [
    "expr.set_output(out, append_mode=True)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {
    "uuid": "79542d3f-60fe-4303-abb8-2a21ce9512f2"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 6.18 s, sys: 1.13 s, total: 7.31 s\n",
      "Wall time: 5.37 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "/out (EArray(375000, 500)) ''\n",
       "  atom := Float64Atom(shape=(), dflt=0.0)\n",
       "  maindim := 0\n",
       "  flavor := 'numpy'\n",
       "  byteorder := 'little'\n",
       "  chunkshape := (16, 500)"
      ]
     },
     "execution_count": 195,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time expr.eval()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {
    "uuid": "79542d3f-60fe-4303-abb8-2a21ce9512f2"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1500032000"
      ]
     },
     "execution_count": 196,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out.size_on_disk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {
    "uuid": "19d61e69-3488-4556-8d2b-cc06edb9c39e"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.73369462,  3.74824436,  0.90627898,  2.86786818,  1.75424957,\n",
       "       -0.91108973, -1.68313885,  1.29073295, -1.68665599, -1.71345309])"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out[0, :10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {
    "uuid": "2409ddc9-2963-4599-9d8c-a3abc1e010d3"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 638 ms, sys: 957 ms, total: 1.6 s\n",
      "Wall time: 2.12 s\n"
     ]
    }
   ],
   "source": [
    "%time out_ = out.read()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {
    "uuid": "2409ddc9-2963-4599-9d8c-a3abc1e010d3"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.73369462,  3.74824436,  0.90627898,  2.86786818,  1.75424957,\n",
       "       -0.91108973, -1.68313885,  1.29073295, -1.68665599, -1.71345309])"
      ]
     },
     "execution_count": 199,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "out_[0, :10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "metadata": {
    "uuid": "65d5272f-66d9-4fdd-a16a-ae900f2842c4"
   },
   "outputs": [],
   "source": [
    "import numexpr as ne  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {
    "uuid": "65d5272f-66d9-4fdd-a16a-ae900f2842c4"
   },
   "outputs": [],
   "source": [
    "expr = '3 * sin(out_) + sqrt(abs(out_))'  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ne.set_num_threads(1)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "metadata": {
    "uuid": "d58a70be-dc0f-444f-895d-9115864059c8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 3.9 s, sys: 349 ms, total: 4.24 s\n",
      "Wall time: 4.26 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([-1.64358578,  0.22567882,  3.31363043,  2.50443549,  4.27413965,\n",
       "       -1.41600606, -1.68373023,  4.01921805, -1.68117412, -1.66053597])"
      ]
     },
     "execution_count": 203,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time ne.evaluate(expr)[0, :10]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 204,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ne.set_num_threads(4)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {
    "uuid": "d58a70be-dc0f-444f-895d-9115864059c8"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 5.46 s, sys: 1.53 s, total: 6.99 s\n",
      "Wall time: 2.76 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([-1.64358578,  0.22567882,  3.31363043,  2.50443549,  4.27413965,\n",
       "       -1.41600606, -1.68373023,  4.01921805, -1.68117412, -1.66053597])"
      ]
     },
     "execution_count": 205,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%time ne.evaluate(expr)[0, :10]  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 206,
   "metadata": {
    "uuid": "d0c3ef43-f285-4dc1-b0ab-af206e6b3dd6"
   },
   "outputs": [],
   "source": [
    "h5.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "metadata": {
    "uuid": "4343a20a-8132-4fbf-9360-3a627da7d0cf"
   },
   "outputs": [],
   "source": [
    "!rm -f $path*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## TsTables"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sample Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [],
   "source": [
    "no = 5000000  \n",
    "co = 3  \n",
    "interval = 1. / (12 * 30 * 24 * 60)  \n",
    "vol = 0.2  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 209,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 704 ms, sys: 86 ms, total: 790 ms\n",
      "Wall time: 789 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "rn = np.random.standard_normal((no, co))  \n",
    "rn[0] = 0.0  \n",
    "paths = 100 * np.exp(np.cumsum(-0.5 * vol ** 2 * interval +\n",
    "        vol * np.sqrt(interval) * rn, axis=0))  \n",
    "paths[0] = 100  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 210,
   "metadata": {},
   "outputs": [],
   "source": [
    "dr = pd.date_range('2019-1-1', periods=no, freq='1s')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 211,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2019-02-27 20:53:14', '2019-02-27 20:53:15',\n",
       "               '2019-02-27 20:53:16', '2019-02-27 20:53:17',\n",
       "               '2019-02-27 20:53:18', '2019-02-27 20:53:19'],\n",
       "              dtype='datetime64[ns]', freq='S')"
      ]
     },
     "execution_count": 211,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dr[-6:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 212,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.DataFrame(paths, index=dr, columns=['ts1', 'ts2', 'ts3'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 213,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 5000000 entries, 2019-01-01 00:00:00 to 2019-02-27 20:53:19\n",
      "Freq: S\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Dtype  \n",
      "---  ------  -----  \n",
      " 0   ts1     float64\n",
      " 1   ts2     float64\n",
      " 2   ts3     float64\n",
      "dtypes: float64(3)\n",
      "memory usage: 152.6 MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 214,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ts1</th>\n",
       "      <th>ts2</th>\n",
       "      <th>ts3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-01-01 00:00:00</th>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "      <td>100.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-01-01 00:00:01</th>\n",
       "      <td>100.018443</td>\n",
       "      <td>99.966644</td>\n",
       "      <td>99.998255</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-01-01 00:00:02</th>\n",
       "      <td>100.069023</td>\n",
       "      <td>100.004420</td>\n",
       "      <td>99.986646</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-01-01 00:00:03</th>\n",
       "      <td>100.086757</td>\n",
       "      <td>100.000246</td>\n",
       "      <td>99.992042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-01-01 00:00:04</th>\n",
       "      <td>100.105448</td>\n",
       "      <td>100.036033</td>\n",
       "      <td>99.950618</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            ts1         ts2         ts3\n",
       "2019-01-01 00:00:00  100.000000  100.000000  100.000000\n",
       "2019-01-01 00:00:01  100.018443   99.966644   99.998255\n",
       "2019-01-01 00:00:02  100.069023  100.004420   99.986646\n",
       "2019-01-01 00:00:03  100.086757  100.000246   99.992042\n",
       "2019-01-01 00:00:04  100.105448  100.036033   99.950618"
      ]
     },
     "execution_count": 214,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 215,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[::100000].plot(figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch09/io_07.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Data Storage"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tstables as tstab"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [],
   "source": [
    "class ts_desc(tb.IsDescription):\n",
    "    timestamp = tb.Int64Col(pos=0)  \n",
    "    ts1 = tb.Float64Col(pos=1)  \n",
    "    ts2 = tb.Float64Col(pos=2)  \n",
    "    ts3 = tb.Float64Col(pos=3)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 218,
   "metadata": {},
   "outputs": [],
   "source": [
    "h5 = tb.open_file(path + 'tstab.h5', 'w')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts = h5.create_ts('/', 'ts', ts_desc)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 220,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 532 ms, sys: 281 ms, total: 813 ms\n",
      "Wall time: 821 ms\n"
     ]
    }
   ],
   "source": [
    "%time ts.append(df)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tstables.tstable.TsTable"
      ]
     },
     "execution_count": 221,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(ts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 222,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "total 306720\n",
      "-rw-r--r--  1 501  20  157037368 Jul 27 10:53 tstab.h5\n"
     ]
    }
   ],
   "source": [
    "ls -n $path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 223,
   "metadata": {},
   "outputs": [],
   "source": [
    "read_start_dt = dt.datetime(2019, 2, 1, 0, 0)  \n",
    "read_end_dt = dt.datetime(2019, 2, 5, 23, 59)  #<2>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 224,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 56.4 ms, sys: 22.1 ms, total: 78.5 ms\n",
      "Wall time: 79 ms\n"
     ]
    }
   ],
   "source": [
    "%time rows = ts.read_range(read_start_dt, read_end_dt)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 225,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 431941 entries, 2019-02-01 00:00:00 to 2019-02-05 23:59:00\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count   Dtype  \n",
      "---  ------  --------------   -----  \n",
      " 0   ts1     431941 non-null  float64\n",
      " 1   ts2     431941 non-null  float64\n",
      " 2   ts3     431941 non-null  float64\n",
      "dtypes: float64(3)\n",
      "memory usage: 13.2 MB\n"
     ]
    }
   ],
   "source": [
    "rows.info()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 226,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ts1</th>\n",
       "      <th>ts2</th>\n",
       "      <th>ts3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-02-01 00:00:00</th>\n",
       "      <td>52.063640</td>\n",
       "      <td>40.474580</td>\n",
       "      <td>217.324713</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-02-01 00:00:01</th>\n",
       "      <td>52.087455</td>\n",
       "      <td>40.471911</td>\n",
       "      <td>217.250070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-02-01 00:00:02</th>\n",
       "      <td>52.084808</td>\n",
       "      <td>40.458013</td>\n",
       "      <td>217.228712</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-02-01 00:00:03</th>\n",
       "      <td>52.073536</td>\n",
       "      <td>40.451408</td>\n",
       "      <td>217.302912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-02-01 00:00:04</th>\n",
       "      <td>52.056133</td>\n",
       "      <td>40.450951</td>\n",
       "      <td>217.207481</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                           ts1        ts2         ts3\n",
       "2019-02-01 00:00:00  52.063640  40.474580  217.324713\n",
       "2019-02-01 00:00:01  52.087455  40.471911  217.250070\n",
       "2019-02-01 00:00:02  52.084808  40.458013  217.228712\n",
       "2019-02-01 00:00:03  52.073536  40.451408  217.302912\n",
       "2019-02-01 00:00:04  52.056133  40.450951  217.207481"
      ]
     },
     "execution_count": 226,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rows.head()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 227,
   "metadata": {},
   "outputs": [],
   "source": [
    "h5.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 228,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "(rows[::500] / rows.iloc[0]).plot(figsize=(10, 6));\n",
    "# plt.savefig('../../images/ch09/io_08.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 229,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 230,
   "metadata": {},
   "outputs": [],
   "source": [
    "h5 = tb.open_file(path + 'tstab.h5', 'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [],
   "source": [
    "ts = h5.root.ts._f_get_timeseries()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 232,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2.3 s, sys: 330 ms, total: 2.63 s\n",
      "Wall time: 2.63 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for _ in range(100):  \n",
    "    d = random.randint(1, 24)  \n",
    "    read_start_dt = dt.datetime(2019, 2, d, 0, 0, 0)\n",
    "    read_end_dt = dt.datetime(2019, 2, d + 3, 23, 59, 59)\n",
    "    rows = ts.read_range(read_start_dt, read_end_dt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 233,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 345600 entries, 2019-02-10 00:00:00 to 2019-02-13 23:59:59\n",
      "Data columns (total 3 columns):\n",
      " #   Column  Non-Null Count   Dtype  \n",
      "---  ------  --------------   -----  \n",
      " 0   ts1     345600 non-null  float64\n",
      " 1   ts2     345600 non-null  float64\n",
      " 2   ts3     345600 non-null  float64\n",
      "dtypes: float64(3)\n",
      "memory usage: 10.5 MB\n"
     ]
    }
   ],
   "source": [
    "rows.info()  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 234,
   "metadata": {},
   "outputs": [],
   "source": [
    "!rm $path/tstab.h5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"http://hilpisch.com/tpq_logo.png\" alt=\"The Python Quants\" width=\"35%\" align=\"right\" border=\"0\"><br>\n",
    "\n",
    "<a href=\"http://tpq.io\" target=\"_blank\">http://tpq.io</a> | <a href=\"http://twitter.com/dyjh\" target=\"_blank\">@dyjh</a> | <a href=\"mailto:training@tpq.io\">training@tpq.io</a>"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
